研究室のUbuntu Serverでaptを更新するのに,Ansibleを使っています.
そこで「今から更新するよ!」をTypetalkに通知しようとして失敗した話です.
Typetalkモジュール
AnsibleにはTypetalkに通知するためのモジュールがあります.
このモジュールは,こんな感じで使えます.
- typetalk:
client_id=abcdefghijklmnopqrstuvwxyz123456
client_secret=abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrstuvwxyz123
topic=1234
msg='サーバーアップデートを開始します!'
ただ,そのまま使ってしまうと,大変なことになります.
「対象ホストの数だけ通知を送ってしまう」のです.
(研究室のチャットに20件の通知を出してしまいました….)
run_onceオプション
このため、1.7から導入されたrun_onceを使います。run_onceは、グループ内の先頭で定義されたホストでのみ実行されるようにするためのパラメーターです。
『Ansibleでの連番ホスト名をつけるなど — そこはかとなく書くよん。』
先程のPlaybookにrun_onceを付けると,1度だけ通知されるようになります.
- typetalk:
client_id=abcdefghijklmnopqrstuvwxyz123456
client_secret=abcdefghijklmnopqrstuvwxyz123456789abcdefghijklmnopqrstuvwxyz123
topic=1234
msg='サーバーアップデートを開始します!'
run_once: true
まとめ
Ansibleから通知をする場合,run_once
を付け忘れないように,という教訓でした.
実際に使っているPlaybookは,GitHubに上げています.
TypetalkのTokenはhosts
に書くなどの工夫をしています.