Ansbile RoleをAnsible Automation Platformで実行

Ansible Automation PlatformのプロジェクトはGit管理するとは思いますが
まずはファイルを配置してAnsible Vaultも使いながら
ジョブテンプレートを実行するまでを記載します。

用語

Ansibleと用語が異なり戸惑うかと存じますが
プロジェクトはPlaybookの登録です。
ジョブテンプレートはそのプロジェクトを実行する環境になります。

ファイル配置と変数ファイル暗号化

デフォルトでは/var/lib/awx/projects/配下のawxがアクセスできるロールを認識しますので
まずディレクトリを作成します。

$ id
uid=973(awx) gid=972(awx) groups=972(awx),971(receptor),973(redis),974(nginx) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ cd /var/lib/awx/projects
$ mkdir test1

ロールを作成し、各ファイルを編集します。

$ cd test1
$ ansible-galaxy init testuser
$ cd testuser
$ vi tasks/main.yml
---
# tasks file for testuser
- name: RedHat Create User
  user:
    user: "{{ user }}"
    group: wheel
    password: "{{ pass | password_hash('sha512') }}"
  when:
  - ansible_distribution != "Ubuntu"
  - ansible_distribution != "Debian"

- name: Debian Ubuntu Create User
  user:
    user: "{{ user }}"
    group: sudo
    password: "{{ pass | password_hash('sha512') }}"
  when:
  - ansible_distribution == "Ubuntu" or ansible_distribution == "Debian"

- name: User Check
  command: "id {{ user }}"
  notify: handler
  register: result
$ vi handlers/main.yml
---
# handlers file for testuser
- name: handler
  debug: var="result"

ロールを実行するPlaybookを配置します。

$ vi ../check.yml
---
- name: testuser
  hosts: all
  user: "{{ exe_user }}"
  become: true
  gather_facts: true

  roles:
  - testuser

パスワードを格納したvars/main.ymlを作成し、コマンド入力の暗号化をします。
Ansible Automation Platformでファイルを指定した暗号化は動作させることができませんでした。

$ vi vars/main.yml
pass: xxxxxxx
$ ansible-vault encrypt --vault-id sudo@prompt vars/main.yml

ディレクトリ・ファイル構成

今回設置したロールのディレクトリ・ファイル構成となります。

$ tree /var/lib/awx/projects/test1
/var/lib/awx/projects/test1
├── check.yml
└── testuser
    ├── README.md
    ├── defaults
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    ├── templates
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml

Ansible Automation Platform側の設定

Ansible Vaultに対応する認証情報をAnsible Automation Platform側で設定します。
認証タイプはVaultを選択します。

プロジェクトを登録します。
今回はソースコントロールのタイプで手動を選びます。
Ansbile Roleを配置してもある程度時間が立たないと
Playbook ディレクトリーでディレクトリが表示されないので表示されないようでしたら待ちます。

ジョブテンプレートを作成します。
認証情報で実行ユーザーと先程登録したVaultの2つを登録します。
今回実行するPlaybookはsudoとfactが必要なのでチェックし保存します。
すぐに実行します。

実行後成功しましたらログインテストします。

$ ssh test1@192.168.1.50

おまけ

検証中にvault_identity_listを設定しようと~/.ssh/xxxxxと設定したところ
実行環境のrunnerユーザで実行するようでして簡単に設定はできなさそうです。

最後に

イメージができたでしょうか。 Ansibleについてのご相談はサイオスまでお問い合わせいただけますと幸いです。