Ansible Automation Platformでワークフローを実行してみよう

Ansbile Automation Platformのワークフローの設定を解説します。

ワークフローとはジョブテンプレート(Playbook)をシーケンス通りに実行するものになります。
今回は2つのジョブテンプレートでユーザを作成し、削除するワークフローを作成します。
無意味なワークフローに思えるかもしれませんが、
後で承認を交えたワークフローを記事にしますのでその前準備だと考えて下さい。

ユーザ作成のジョブテンプレート

ユーザを作成するロールを作成します。
/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 test2
$ cd test2
$ ansible-galaxy init useradd

ユーザ作成のタスクを作成します。

$ vi useradd/tasks/main.yml
---
# tasks file for test
- name: Create Group
  group:
    name: "{{ group }}"

- name: RedHat Create User
  user:
    name: "{{ add_user }}"
    password: "{{ pass | password_hash('sha512') }}"
    group: "{{ group }}"
    groups:  wheel
    shell: /bin/bash
  when:
  - ansible_distribution != "Ubuntu"
  - ansible_distribution != "Debian"

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

- name: .ssh Directory Create
  file:
    path: "/home/{{add_user}}/.ssh"
    state: directory
    owner: "{{ add_user }}"
    group: "{{ group }}"
    mode: "700"

- name: Add AuthKey
  ansible.posix.authorized_key:
    user: "{{ add_user }}"
    key: "{{ authkey }}"

- name: User Check
  command: "id '{{ add_user }}'"
  notify: handler
  register: result

ハンドラーを作成します。

vi useradd/handlers/main.yml
---
# handlers file for test
- name: handler
  debug: var="result"

実行するPlaybookを作成します。

$ vi useradd.yml
---
- name: useradd
  hosts: all
  user: "{{ tmp_user }}"
  become: true
  gather_facts: true

  roles:
  - useradd

SSHの公開鍵を暗号化して配置します。
今回暗号化しない変数はロール側で記載するか
Ansbile Automation Platform側で記載するか考える必要があります。
ただ、暗号化した変数はロール側に格納しないといけないようです。
ここは設計が必要なので何がベストか本番環境では考慮が必要です。

$ vi vars/main.yml
---
authkey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC134sjVArgDWUhCQyAFsC0zNKJlf6kGPSRCN0cvNuf4LG8vSu7g4bFKjQL4sRCD/1fO0B2bO3eKWx7XiXiMEr5FBIOK0msEuxSPN2JZSgPb2Dzz/rIFmCTCndRH1Pw30onvRqWgUWRJQ4pza8XFp0qmGK8uC9Ba7vatIyEOw1sAU7FOMffsl9/g6IVWGMods3au6y29BGHPtlnrcb7OBxVcZnvQRTK2p1PCrGcQsvH8d8iaUpNSXwGQqyDYToEAiphMzx+D7jjvpmf/NA2fPtwqZz7sXBr0UOi3x1ZnurXir/tBPZPFytXfL4C0MUNzSpK3ts3i4FQSFEx0A04LZgft/gHB78KBTzwviXwHkqJAZcPyuwuj4GKbbflkTdQsgmy9cYtHkZapyA42xTyOGcH+2HweSNjRpvNQ6HVc31Wi/UuOqFLBaqn/XH72nlJudX7xUEZzveGroBlXyy9wQmlr2qNbHxJc+HTQb5e88FnLBuEcAEzUkgdXJa3Itxxxxx=
xxxx@xxxx"

暗号化します。
暗号化は入力を選び、そのパスワードはAnsbile Automation Platform側で管理します。

$ ansible-vault encrypt --vault-id test_auth@prompt useradd/vars/main.yml

Ansbile Automaiton Platformでの設定

認証情報で先程の暗号化を設定します。

新規ジョブテンプレートを作成します。
変数は後述のワークフロー側でも設定できますので
どちらに変数を登録するかを慎重に決めて下さい。
今回はパスワードログインですので
ansible_ssh_passも設定しております。
これらも暗号化する場合は
useradd/vars/main.ymlに含めるなり、
以前のブログを参考にされて下さい。

ユーザ削除のジョブテンプレート

ユーザ削除のロールを作成します。

$ mkdir ../test3
$ cd ../test3
$ ansible-galaxy init userdel

ユーザ削除のタスクを作成します。

$ vi userdel/tasks/main.yml
---
# tasks file for test
- name: Delete Group
  group:
    name: "{{ del_group }}"

- name: Delete User
  user:
    name: "{{ del_user }}"
    state: absent
    remove: yes
  notify: handler
  register: result

ハンドラーを作成します。

$ vi userdel/handlers/main.yml
---
# handlers file for test
- name: handler
  debug: var="result"

実行するPlaybookを作成します。

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

  roles:
  - userdel

新規ジョブテンプレートを作成します。
変数としてansible_ssh_pass,ansible_sudo_pass
を登録します。

ワークフローテンプレート作成

ワークフローテンプレートを作成します。
変数としてtmp_user,tmp_group,exe_user,add_user,group,del_user,del_group
を登録します。

設定を行うと画面が変わり、ジョブテンプレートを連結させていきます。

実行

ワークフローテンプレート実行します。
今回はテストしてから実行しているのでエラーが起きないはずです。