スクリプトのお勉強 失敗談 技術

小ネタ: Ansible , with_itemsをloopに変える方法

投稿日:

とっても小さい小ネタです。

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が必要だったり、不要だったりとバラバラなので、これはこれでいいのかもしないと思いました。

おわりに

はまりかけたので、小ネタに書いておきます。

-スクリプトのお勉強, 失敗談, 技術
-

執筆者:

関連記事

良いタブレットない問題

BMAX maxpad I11が故障した この記事で新しいタブレット買ったのですが、2ヶ月程度で故障しました。。 正確には、指に何も反応しなくなってしまいました。 ダメだったので修理依頼 いろいろして …

「Python3 メモ」 独自例外クラスからの値取得/変数の内容取得

忙しい。。 この時期でなぜか忙しく、ブログ書いてる暇ない。。のでメモ書き程度。そして、内容をよく忘れるやつ。。 python3の独自例外クラス 例外クラスからの値取得方法をいつも忘れます。ある関数or …

小ネタ – Python3 でIPv4アドレスの第三オクテットを加算する方法

ホント小ネタです。IPv4アドレスの第四オクテットは単に加算すればいいですが、第三オクテットを加算する方法が見つかりませんでした 通常はしないのかもしれませんが、、そして残念ながら、いい方法がありませ …

seaborn + Pandas + Python によるグラフ描画(その1: 準備編)

グラフ描画してみよう 今現在の仕事で、グラフ描画する可能性があるので、少し練習してみようと思います。 題材について 突然ですが、私は確定拠出型年金に加入しています。証券会社はSBI証券 にしています。 …

Mojolicious XML-RPC Pluginの開発(1)

はじめに 最近、お仕事関連で、perlとWebアプリケーションを触っています。 両方一度にお勉強、ということで、perlのWAF(Webアプリケーションフレームワーク)を調べてみようと思いました。 こ …

google オプトアウト Click here to opt-out.