お疲れ様です。きざきまるおです。
今回はAnsibleのloopの使い方について解説していこうと思います。
こちらは同じコマンドを別パラメーターで何度も実行するケースでよく使いますので是非見ていってください。
それではどうぞ。
シーケンス内のloop
早速ですがまずはコード全文を書きます。
- name: loop check
hosts: all
gather_facts: no
tasks:
- name: loop check at debug
debug:
msg: "{{ count }} >> {{ item['number'] }}"
loop_control:
index_var: count
loop:
- number: 1
string: A
- number: 2
string: B
- number: 3
string: C
実行結果
# ansible-playbook -i hosts loop-get-playbook.yml
PLAY [loop check] **************************************************************
TASK [loop check at debug] *****************************************************
ok: [192.168.0.2] => (item={'number': 1, 'string': 'A'}) => {
"msg": "0 >> 1"
}
ok: [192.168.0.2] => (item={'number': 2, 'string': 'B'}) => {
"msg": "1 >> 2"
}
ok: [192.168.0.2] => (item={'number': 3, 'string': 'C'}) => {
"msg": "2 >> 3"
}
PLAY RECAP *********************************************************************
192.168.0.2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
varsセクションの情報をloopで取得
ではまたコード全文を見ていきましょう。
- name: loop check
hosts: all
gather_facts: no
vars:
check:
- number: 1
string: A
- number: 2
string: B
- number: 3
string: C
tasks:
- name: loop check at debug
debug:
msg: "{{ count }} >> {{ item['string'] }}"
loop_control:
index_var: count
loop: "{{ check }}"
実行結果
# ansible-playbook -i hosts loop-vars-playbook.yml
PLAY [loop check] **************************************************************
TASK [loop check at debug] *****************************************************
ok: [192.168.0.2] => (item={'number': 1, 'string': 'A'}) => {
"msg": "0 >> A"
}
ok: [192.168.0.2] => (item={'number': 2, 'string': 'B'}) => {
"msg": "1 >> B"
}
ok: [192.168.0.2] => (item={'number': 3, 'string': 'C'}) => {
"msg": "2 >> C"
}
PLAY RECAP *********************************************************************
192.168.0.2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
vars_files内データの取得
またコード全文を見てみましょう。
- name: loop check
hosts: all
gather_facts: no
vars_files:
- ./loop_check.yml
tasks:
- name: loop check at debug
debug:
msg: "{{ count }} >> {{ item['number'] }}"
loop_control:
index_var: count
loop: "{{ check }}"
そしてvars_filesセクションで呼び出されているファイルは以下のような内容になってます。
check:
- number: 1
string: A
- number: 2
string: B
- number: 3
string: C
実行結果
# ansible-playbook -i hosts loop-file-playbook.yml
PLAY [loop check] **************************************************************
TASK [loop check at debug] *****************************************************
ok: [192.168.0.2] => (item={'number': 1, 'string': 'A'}) => {
"msg": "0 >> 1"
}
ok: [192.168.0.2] => (item={'number': 2, 'string': 'B'}) => {
"msg": "1 >> 2"
}
ok: [192.168.0.2] => (item={'number': 3, 'string': 'C'}) => {
"msg": "2 >> 3"
}
PLAY RECAP *********************************************************************
192.168.0.2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
それではまた。