てくなべ (tekunabe)

ansible / network / automation / StackStorm

[Ansible] 小ネタ: 順番が違うだけで読みにくい Playbook

はじめに

頭の体操なので、実運用で利用するのはおすすめしませんシリーズです。

Playbook は YAML で書きます。ディクショナリの順番には処理上の意味はありません。ところが、慣例上は以下のように hosts から書くことが書くことが多いのでしょうか。

- hosts: localhost
  gather_facts: no
  
  # ...略...

今回はこれを、処理に影響を与えない範囲で読みにくく崩してみます。

読みにくい Playbook

- gather_facts: false
  tasks:
    - when: 1 == 1
      debug:
        msg: "hello!"
      name: debug test
  connection: local
  hosts: localhost

ディクショナリの順番を変えただけですが、読みにくくなったと思います。 gather_factstasksconnectionhosts は 同じ階層のディクショナリのキーなので、どういう順番でも処理上は関係ないわけです。

ちゃんと実行できます。

$ ansible-playbook -i localhost, 00.yml 

PLAY [localhost] ********************************************************************************

TASK [debug test] ********************************************************************************
ok: [localhost] => {
    "msg": "hello!"
}

PLAY RECAP ********************************************************************************
localhost           : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

よく見かける Playbook

よく見かけるのは以下のような書き方ではないでしょうか。

- hosts: localhost
  gather_facts: false
  connection: local

  tasks:
    - name: debug test
      debug:
        msg: "hello!"
      when: 1 == 1
  • 各プレイでは hosts が最初、gather_facts などを続ける
  • 各タスクでは name が最初、when が最後の方

しっくりきますね。はやり、よく見かける順番で書くのがいいと思います。

ただ、when については最後の方に書く週間が不思議に感じられる方もいらっしゃるようです。プログラムでいうと if に相当するので、タスクの最初の方に定義するのが自然ではという考え方も分かる気がします。

参考

もっとひどいのはこちら tekunabe.hatenablog.jp