Ansible: Playbookの繰り返し制御の色々 (5)

今回もAnsiblePlaybookにおける繰り返し制御について、学んでいきます。

引き続き題材は本家のドキュメントから。

シリーズはこちら。

Ansible: Loops
タスクの繰り返し実行に関する内容です。 参照元 ドキュメント 記事一覧
スポンサーリンク

Looping Over A List With An Index

こちらも「滅多に使わないんじゃない?」という注意書きのあるものです。
ループを利用する際に、配列の数値の添え字を取り出せるよ、ということだそうです。

実際に見てみましょう。

with_indexed_items を使って書くと、 item.0 で添え字を取り出せます。

Using ini file with a loop

続いては、 ini 形式のファイルをループとして使う方法です。
ini 内のキーを正規表現で取り出して使えるようです。

こちらは、具体的なところが本家のドキュメントに記載されています。

まずは、iniファイル。

そして、Ansible Playbook。

これらを揃えて、実行した結果が下記となるようです。

iniファイル内の section1 の中の、さらにキー名を value[1-2] という正規表現で取り出していますね。

Flattening A List

タイトルを訳すと「リストの平坦化」といった意味になります。
あまり伝わってこないので、実際に確かめてみます。

ドキュメント内にある例を、実際にAnsible Playbookにしてみます。

これを実行すると、下記となります。

このように、配列の構造に関わらずすべてを単純な一次元の配列として扱うようになります。
色々と集めた処理結果の配列を、構造を気にせずに一気に処理したい、、というような使い方だと使えるかも、、、といったところでしょうか。

Using register with a loop

次は、 register を使って、ループの実行結果を変数内に results 属性として保存できるよ、というところです。

というわけで、ドキュメント内の例をベースに動きを確かめます。

with_items の直後に register を記載しています。これで echo という変数の中に結果が格納され、次の debug で中身を確認できます。

動作結果も見てみましょう。

with_items で与えた二つの要素の実行結果が、配列で results の中に格納されていますね。

また、 results の結果も配列なので、その後にループの要素として利用できます。
ドキュメント内の例ですと、実行結果が失敗の場合の処理を判定するものになっています。

また、最初の例ではループが全て終わってから結果を取り出していましたが、各要素ごとの結果を利用する例も記載されています。

つまり、 changed_when の呼ばれるタイミングでは、 変数 echo の属性 stdout には、要素一つずつの実行結果が格納されている、ということになりますね。

まとめ

今回も、複雑な動きや独特な取り扱いのものが多かったと思います。
こういうものでも、自分で動かしながら確かめることで、意味を理解しやすくなるのでは無いでしょうか。

次回が、繰り返し制御の最終回になるはずです!

スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする