■ はじめに
Ansible には、Ansible Tower / AWX の各オブジェクトを作成、管理するための tower_* モジュール郡があります。GUI 操作を自動化できるのでとても便利です。
これらのモジュールは転換期を迎えています。
この記事では、最近の tower_* モジュール事情と、Collection 版モジュールの利用方法についてご紹介します。
- 動作確認環境
- Ansible 2.9.6
- AWX 10.0
- awx.awx モジュール 10.0
■ 最近の tower モジュール事情
Collection 化 と 脱 tower-cli 化
tower_* モジュールは現在、以下の2点で転換期を迎えています。
- Ansible 標準付属モジュールから、Collection モジュールへの移行(本モジュール群に限らず)
- モジュール内部で利用している
tower-cliがlegacy扱いにtower-cli is a legacy command line tool for Ansible Tower.
- 代わりに
awxという CLI ができた
移行先の、Collection モジュールでは、すでに、tower_license、tower_workflow_job_template、tower_workflow_job_template_node といった、新しいモジュールも開発されています。これらのモジュールは内部で tower-cli を利用しないタイプです。
また、既存のモジュールも脱 tower-cli 化が進んでいます(例: tower_organization モジュールの 脱 tower-cli 化)。
逆に、まだ tower-cli を利用しているモジュールは以下の4つのようです。(2020/04/03 現在、import.+tower_cli で検索)
tower_credentialtower_receivetower_sendtower_workflow_launchtower_workflow_template- 後継の
tower_workflow_job_templateモジュールがすでにあるので、こちらはメンテされなそう
- 後継の
pip install ansible-tower-cli しなくて良くなる、という点では利用者としては利便性が高まると思います。
■ Collection モジュールの使い方
Collection 版の tower モジュールのインストール方法と簡単な使い方をご紹介します。
インストール方法
Collection モジュールは、標準では付属されていないため、別途インストールする必要があります。
インストールには、ansible-galaxy collection install コマンドを利用します。
目的の collection は awx.awxなので、以下のコマンドでインストールします。
- インストールコマンド
ansible-galaxy collection install awx.awx
- 実行例
$ ansible-galaxy collection install awx.awx Process install dependency map Starting collection install process Installing 'awx.awx:10.0.0' to '/Users/sakana/.ansible/collections/ansible_collections/awx/awx'
ログが示している通り、デフォルトでは、~/.ansible/collections/ansible_collections/ 配下にインストールされます。
たとえば、モジュール本体のコードは以下のディレクトリに配置されます。
$ ls -1 ~/.ansible/collections/ansible_collections/awx/awx/plugins/modules/ __init__.py tower_credential.py tower_credential_type.py tower_group.py tower_host.py tower_inventory.py tower_inventory_source.py tower_job_cancel.py ...(略)...
ドキュメントの確認
ansible-doc コマンドで、インストールしたモジュールが認識できるか確認を兼ねて、ドキュメントを表示します。
モジュール名は、awx.awx.tower_organization のように名前空間付きで指定します。(参考: [Ansible] ansible-doc コマンドで Collection のモジュールのドキュメントを表示する - てくなべ (tekunabe))
$ ansible-doc awx.awx.tower_organization
> TOWER_ORGANIZATION (/Users/sakana/.ansible/collections/ansible_collections/awx/awx/plugins/modules/tower_organization.py)
Create, update, or destroy Ansible Tower organizations. See https://www.ansible.com/tower for an overview.
* This module is maintained by The Ansible Community
OPTIONS (= is mandatory):
- custom_virtualenv
Local absolute file path containing a custom Python virtualenv to use.
[Default: ]
type: str
version_added: 2.9
- description
The description to use for the organization.
[Default: (null)]
type: str
...(略)...
標準モジュールのように、整形されたドキュメントを Web で確認できないので、ansible-doc コマンドを活用しましょう。
なお、名前空間なしで指定すると、同名の標準モジュール(があれば)の方の情報が表示されます。
基本的な使い方
名前空間について
公式ドキュメントに記載があるように、Collection モジュールを利用する場合は、名前空間を指定する必要があります。
名前空間を指定する方法は 2種類あります。
- 都度 FQCN (fully qualified collection name)でモジュール名を指定
- Play の
collectionsキーワードで指定
Playbook 例
ごく簡単な例として、awx.awx.tower_organization を利用して、組織を作成する Playoobk をご紹介ます。ここでは FQCN でモジュール名を指定します。
- hosts: tower gather_facts: no connection: local tasks: - name: create org awx.awx.tower_organization: # 名前空間含めた FQCN で指定 tower_host: https://towerのホスト # https スキーム付きで指定 tower_username: admin tower_password: xxxx validate_certs: no name: new_org # 組織の名前 description: new_desc # description state: present # デフォルトで present
[2020/05/04 追記]
なお、接続情報の指定はこの公式ブログによると、環境変数や tower_cli.cfg での指定も有効なようです。
実行結果
Playbook を実行します。
$ ansible-playbook -i inventory.ini tower_org.yml PLAY [tower] ***************************************************************************************************** TASK [create org] ************************************************************************************************ changed: [awx1] PLAY RECAP ******************************************************************************************************* awx1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
無事に、組織 new_org が作成されました。

なお、ここで利用した awx.awx.tower_organization モジュールは、すでに 脱 tower-cli 化されているため、tower-cli がない環境で無事に動作したことがかくにできました。
■ まとめ
最近の tower_* モジュール事情と、Collection 版モジュールの利用方法についてご紹介しました。
- Collection モジュールへの移行
- 進む、脱
tower-cli化 - Collection モジュールは別途インストールが必要
- 利用時は名前空間の指定が必要
参考
[2020/05/04 追記]