【Ansible】registerに格納したリストを、条件で絞って新たなリストに格納する
はじめに
set_factモジュールとwith_items、whenを駆使して、
新規リストを作るplaybook書きました。
背景
実現したかったことは以下の通りです。
- shellモジュールで実行したシェルの 標準出力(複数行)をregisterに突っ込む
- そのstdout_linesの中で 条件に合致する行を新しい配列変数に定義する
playbook
こんなplaybookができました。
sample.shの標準出力のうち、
keywordが含まれる行を、
new_listに格納してます。
- name: exec script shell: sh sample.sh register: result - name: define empty list set_fact: new_list : [] - name: make error command list set_fact: new_list : "{{ new_list + [item] }}" with_items: "{{ result.stdout_lines }}" when: '"keyword" in item'
with_itemsとset_factでリストを作るには、
以下のような書き方になります。
set_fact: new_list : "{{ new_list + [item] }}" with_items: "{{ result.stdout_lines }}"
空のnew_listを定義しておかないと、
playbook実行時に、
new_listって誰よ!って怒られます。
- name: define empty list set_fact: new_list : []
新しいリストを作るのに、
何かしら条件を引っ掛ける場合は、
whenで書いてあげます。
when: '"keyword" in item'
まとめ
小ネタをつなぎ合わせた合体技ができました。
同じような場面に遭遇した人に使ってもらえたら幸いです。
参考
https://docs.ansible.com/ansible/latest/modules/set_fact_module.html