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
を登録します。
設定を行うと画面が変わり、ジョブテンプレートを連結させていきます。
実行
ワークフローテンプレート実行します。
今回はテストしてから実行しているのでエラーが起きないはずです。