とっても小さい小ネタです。
Ansible 2.4(今現在) -> Ansible 2.9に変えたい
Ansibleを使用していますが、だいたい2.4ぐらいを使っています。
流石にバージョンアップしないと、ということで、2.9を目標に見直していました。
あまり変えるところはなくて、ほぼほぼ動いたのですが、一応with_itemsをloopに変えておこうかと。
ひとつだけハマったのが、そもそもからして配列の場合でした。
with_items=>loop変更(動かない)
変更対象は以下です。groups['A']
とは、インベントリファイルでグループを指定した際の書き方です。
with_items: - "{{ groups['A'] }}" - "{{ groups['B'] }}" - "{{ groups['C'] }}"
例えば以下のようなインベントリファイルの場合、groups[‘A’]と書くと[hostA1, hostA2]を指します。
[A] hostA1 hostA2 [B] hostB1 hostB2 [C] hostC1 hostC2
これを以下のように変更すると思い込みました。何度も言いますが、以下は間違ってます。
loop:
- "{{ groups['A']|flatten(levels=1) }}"
- "{{ groups['B']|flatten(levels=1) }}"
- "{{ groups['C']|flatten(levels=1) }}"
with_items=>loop変更(正しい方法)
これは単に以下のように書けばいいだけでした。
loop: “{{ groups[‘A’] + groups[‘B’] + groups[‘C’] }}”
つまりloopは”flattenを足せばいいだろう”と思い込みが間違っていて、loop:は自分で一次元配列を定義する 必要があると理解すればよかったのでした。
groups自体、一次元配列を意味する変数なので、他の配列と足せばいいだけです。
なんとなくwith_itemsのままでいいような気がしていたが
loopに変更するまでは、with_itemsの方がいいような気がしていました。
でも、loopに変更してみると、いままで、一次元配列かどうか無関係にwith_itemsに設定していたのが分かりました。
たしかにflattenが必要だったり、不要だったりとバラバラなので、これはこれでいいのかもしないと思いました。
おわりに
はまりかけたので、小ネタに書いておきます。