Ansibleのhandlersで複数の処理をする
Ansibleでメールアドレスを追加したい時 Ansibleのtemplateに新規アドレスを追加しただけで メールアドレスが増えるようにしましょう。 もちろん冪等性を保ったまま。 Dovecotはpasswd.j2のファイルにパスワードが追加されたら Dovecotを再起動するだけなので Ansibleのhandlers を使ってすぐできます。
実際に使用しているファイルは私のGitHubにありますので参考にしてください。
roles/dovecot/handlers/main.yml
- name: restart dovecot
systemd: name=dovecot state=restarted
become: yes
roles/dovecot/tasks/Debian.yml
- name: render dovecot-passwd
template: src=templates/passwd.j2 dest=/etc/dovecot/passwd
notify: restart dovecot
こんな感じでnotifyとhandlersを書いておけばroles/dovecot/templates/passwd.j2 が変更された時だけDovecotを再起動してくれます。 ここまではhandlersで再起動するという一つの処理だけの場合問題ありません。
Ansible の handlers で複数の処理がしたい
Postfixはメールアドレスが追加された場合Postfixを再起動するだけではうまくいきません。 vmailboxとvirtualをpostmapして newaliasesしてPostfixをrestartしなければいけないのです。 しかし、困ったことにAnsibleのhandlersには複数の処理が書けません。 Ansibleの2.0くらいからhandlersにinclude:が書けるようになったので いったんhandlersでrestart_tasks.ymlをincludeして restart_tasks.ymlで複数の処理を書けばうまく処理できます。
register: result
when: result
で連続実行されるようにしておきます
roles/postfix/handlers/main.yml
- name: Restart conditionally
include: restart_tasks.yml
roles/postfix/tasks/restart_tasks.yml
- name: Restart conditionally step 1
command: postmap /etc/postfix/vmailbox
become: yes
register: result
- name: Restart conditionally step 2
command: postmap /etc/postfix/virtual
become: yes
when: result
- name: Restart conditionally step 3
command: postalias hash:/etc/aliases
become: yes
when: result
- name: Restart conditionally step 4
command: newaliases
become: yes
when: result
- name: Restart conditionally step 5
systemd: name=postfix state=restarted
become: yes
when: result
Ansible2.2 で問題なく動きました
ブログ記事を投稿したらTwitterでお知らせいたします。ブログを気に入っていただけた方はお気軽にフォローしてください。
— Solist Work (@SolistWork) 2018年11月27日
関連記事
最新記事
タグ一覧
-
ansible (2)
application (8)
chrome (1)
command (14)
django (1)
docker (3)
document (1)
emacs (14)
git (2)
google (1)
hugo (1)
kubernetes (1)
linux (20)
makefile (6)
mariadb (2)
melpa (1)
postgresql (2)
python (1)
security (2)
terminal (11)
thinkpad (2)
work (6)
zsh (10)