■ はじめに
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_credential
tower_receive
tower_send
tower_workflow_launch
tower_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 追記]