背景
ansibleでroleとしては同じだが、地域毎にhostsのsubsetでグルーピングしている状態で
都度都度、対象の地域に --limit
オプションでしぼってplaybookを実行している。
かつ、地域毎に微妙に違う箇所を変数で受け取っているため
このlimitオプションをつけ忘れると全地域に特定地域の設定で実行されてしまう。
危険だなーとずっと思っていたのだが、この危険な状態を是正する事が出来たのでご紹介。
inventory-file
--inventory-file
オプションで指定するファイルには全ホストが地域毎にsubsetで管理されている。
ここに ungrouped
のものを適当に追加する。
inventory.diff
+ 127.0.0.1 <- これを追加
[asia]
10.1.1.1
10.1.1.2
10.1.1.3
10.1.1.4
playbook
変更前のplaybookが下記の時
playbook
---
- name: configure XXX
gather_facts: false
hosts: all
tasks:
- name: configure XXX
略:
先頭に ungrouped
向けのタスクを追加する
playbook.diff
---
+ - hosts: ungrouped
+ gather_facts: false
+ connection: local
+ tasks:
+ - name: Safety
+ fail: msg="groupを指定してください"
+
- name: configure XXX
gather_facts: false
hosts: all
tasks:
- name: configure XXX
略:
これで limit
を忘れると ungrouped
が対象に入ってくるので下記のように先頭タスクで失敗させて止める事が出来る。
$ ansible-playbook -i inventory update_dns.yml
PLAY [ungrouped] **************************************************************************************************************************************************************************************************
TASK [Safety] *****************************************************************************************************************************************************************************************************
fatal: [127.0.0.1]: FAILED! => {"changed": false, "msg": "groupを指定してください"}
PLAY RECAP ********************************************************************************************************************************************************************************************************
127.0.0.1 : ok=0 changed=0 unreachable=0 failed=1
limit
を指定していれば ungrouped
は対象がいないためスキップされる。
$ ansible-playbook -i inventory update_dns.yml -l dev
PLAY [ungrouped] **************************************************************************************************************************************************************************************************
skipping: no hosts matched
PLAY [configure dns lookup] ***************************************************************************************************************************************************************************************
TASK [configure dns lookup] ***************************************************************************************************************************************************************************************
ok: [172.17.0.35]
PLAY RECAP ********************************************************************************************************************************************************************************************************
172.17.0.35 : ok=1 changed=0 unreachable=0 failed=0