はじめに
Ansible は、Inventory Plugin という機能によって、様々な形式のインベントリを利用できるようになっています。
よくある INI や YAML 形式のスタティックなファイル以外にも、ダイナミックにインベントリ情報を取得することもできます。
たとえば、awc_ec2
や、vmware_vm_inventory
、netbox
などがあります。
他に Ansible Tower のインベントリ情報にも対応しています。
この記事では、tower
インベントリプラグインを利用して、Ansible Tower 上で定義したインベントリを、CLI の Ansible で利用する方法を紹介します。
- 動作確認環境
- Ansible 2.9.5
- Ansible Tower 3.6.3
- もくもく会環境を活用させていただきました
設定ファイルの作成
Ansible Tower への接続情報や、対象のインベントリを指定する設定ファイルを作成します。
公式ドキュメントの例が参考になります。
inventory_tower.yml
--- plugin: tower host: タワーのIPアドレス username: testuser # ユーザー名 password: testupassword # パスワード inventory_id: 2 # インベントリID validate_certs: false # SSL 証明書検証の無効化
今回はお試しのため、パスワードは平文で記載していますが、ansible-vault による暗号化などをしたほうがよいです。
inventory_id
で指定する ID は、Ansible Tower の画面上で対象のイベントリ画面を開いたときの URL で分かります。
なお、今回対象のインベントリはこんな内容です。
準備はこれだけです。
あとは、Ansible の各コマンドの -i
オプションにこの設定ファイルの yaml を指定するだけです。
確認
Playbook を実行せずとも、インベントリの内容を確認するための ansible-inventory
というコマンドがありますので、ansible-inventory
コマンドで確認します。
一覧の表示
ansible-inventory
コマンドの、--list
オプションで、インベントリのホストや割り当てられる変数の一覧を表示できます。
表示形式はデフォルトでは JSON ですが、-y
または --yaml
オプションで YAML に変更できます。
- コマンド例
$ ansible-inventory -i inventory_tower.yml --list -y
以下、実行例です。
$ ansible-inventory -i inventory_tower.yml --list -y all: children: control: hosts: ansible: ansible_host: 10.0.0.176 ansible_password: xxxx ansible_user: studentXX nodes: &id001 rtr1: Loopback100: 192.168.100.1 rtr2: Loopback100: 192.168.100.2 private_ip: 172.16.49.144 remote_tower_enabled: 'true' remote_tower_id: 2 dc1: hosts: rtr1: ansible_connection: network_cli ansible_host: 10.0.0.249 ansible_network_os: ios ansible_user: ec2-user nodes: *id001 private_ip: 172.16.214.99 remote_tower_enabled: 'true' remote_tower_id: 3 # ...(略)...
グループ階層の確認
--graph
オプションで、グループ階層が確認できます。
- コマンド例
$ ansible-inventory -i inventory_tower.yml --graph
以下、実行例です。
$ ansible-inventory -i inventory_tower.yml --graph @all: |--@control: | |--ansible |--@dc1: | |--rtr1 | |--rtr3 |--@dc2: | |--rtr2 | |--rtr4 |--@routers: | |--@arista: | | |--rtr2 | | |--rtr4 | |--@cisco: | | |--rtr1 | |--@juniper: | | |--rtr3 |--@ungrouped:
おわりに
この記事では、tower
インベントリプラグインを利用して、Ansible Tower 上で定義したインベントリを、CLI の Ansible で利用する方法を紹介しました。
Ansible Tower でいろいろ設定していくと「ちょっとこの Playbook だけ CLI で実行したい」というときに、Tower のインベントリ情報をダイナミックに利用できるのは便利ではないでしょうか。
なお、このプラグインは今後(Ansible 2.10?)、Ansible 本体付属ではなく、awx.awx という Collection 上で開発が進んでいく模様です。