
명령 결과를 추출하기 위해 내 플레이북에서 쉘 명령을 실행하고 있습니다. 의 출력
- debug: msg="{{ dblist.stdout_lines }}"
~이다
ok: [host] => {
"msg": [
"inst1:db1"
"inst1:db2"
"inst1:db3"
"inst2:db4"
"inst2:db3"
]
}
item.0의 값을 inst1로, item.1의 값을 db2 등으로 고려하여 다음 플레이북을 실행할 수 있는 형식으로 이 값을 저장해야 합니다.
현재
- debug: msg="{{ item.0 }} has a value {{ item.1 }}"
with_items: "{{ dblist.stdout_lines }}"
다음과 같은 값을 제공합니다.
ok: [host] => (item=inst1:db1) => {
"msg": "i has a value n"
}
ok: [host] => (item=inst1:db2) => {
"msg": "i has a value n"
감사해요.
답변1
예를 들어
- debug:
msg: "{{ _key }} has a value {{ _val }}"
loop: "{{ dblist.stdout_lines }}"
vars:
_arr: "{{ item.split(':') }}"
_key: "{{ _arr.0 }}"
_val: "{{ _arr.1 }}"
준다
msg: inst1 has a value db1
msg: inst1 has a value db2
msg: inst1 has a value db3
msg: inst2 has a value db4
msg: inst2 has a value db3
답변2
새로운 버전(ansible-core>=2.11)을 사용하는 경우 필터를 사용할 수 있습니다 split
.
- debug:
msg: "{{ item.0 }} has a value {{ item.1 }}"
loop: "{{ dblist.stdout_lines | map('split', ':') }}"
이전 버전에서도 비슷한 결과를 얻을 수 있지만 더 보기 흉합니다.
- debug:
msg: "{{ item.0 }} has a value {{ item.1 }}"
loop: "{{ dblist.stdout_lines }}"
loop_control:
loop_var: _item
vars:
item: "{{ _item.split(':') }}"