てくなべ (tekunabe)

ansible / network / automation

[Ansible] tower モジュールの最近の事情と Collection 版モジュールの使い方(AWX10.0時点)

■ はじめに

Ansible には、Ansible Tower / AWX の各オブジェクトを作成、管理するための tower_* モジュール郡があります。GUI 操作を自動化できるのでとても便利です。

これらのモジュールは転換期を迎えています。

この記事では、最近の tower_* モジュール事情と、Collection 版モジュールの利用方法についてご紹介します。


■ 最近の tower モジュール事情

Collection 化 と 脱 tower-cli

tower_* モジュールは現在、以下の2点で転換期を迎えています。

移行先の、Collection モジュールでは、すでに、tower_licensetower_workflow_job_templatetower_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種類あります。

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 が作成されました。

f:id:akira6592:20200403124146p:plain
作成された組織

なお、ここで利用した awx.awx.tower_organization モジュールは、すでに 脱 tower-cli 化されているため、tower-cli がない環境で無事に動作したことがかくにできました。


■ まとめ

最近の tower_* モジュール事情と、Collection 版モジュールの利用方法についてご紹介しました。

  • Collection モジュールへの移行
  • 進む、脱 tower-cli
  • Collection モジュールは別途インストールが必要
  • 利用時は名前空間の指定が必要

参考

[2020/05/04 追記]

www.ansible.com