LoginSignup
3
2

More than 5 years have passed since last update.

ansible-playbookでlimitオプションを強制する(無指定の場合失敗させる)

Posted at

背景

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
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2