ぴよ丸水産

週末ファゴッティストによる技術ブログ

【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