我正在尝试将一些代码从with_items迁移到循环中。
我有这个playbook.yml。似乎它们是相同的,但只是将with_items更改为循环
- debug:
msg: "{{ item }}"
loop:
- "{{ lookup('pipe','echo -e \"pro.json\npre.json\ndev.json\"').split('\n') }}"
- debug:
msg: "{{ item }}"
with_items:
- "{{ lookup('pipe','echo -e \"pro.json\npre.json\ndev.json\"').split('\n') }}"
这是输出。
TASK [loop: debug] **********************************************************************************************************************************************************************************
ok: [server] => (item=[u'pro.json', u'pre.json', u'dev.json']) => {
"msg": [
"pro.json",
"pre.json",
"dev.json"
]
}
TASK [with_items : debug] **********************************************************************************************************************************************************************************
Ok: [server] => (item=pro.json) => {
"msg": "pro.json"
}
ok: [server] => (item=pre.json) => {
"msg": "pre.json"
}
ok: [server] => (item=dev.json) => {
"msg": "dev.json"
}
如您所见,循环将输出保持为一种链状,并且with_items将其分为三个输出。
我需要更改循环的输出,以使其看起来像with_items。我想要的是创建一个循环给我一个列表,具体取决于该循环将循环的列表。
with_items结果将循环3次或与pipe命令一样多,但仅循环一次
编辑:
我已经尝试过with序列的for循环解决方案,这似乎是可行的,但是我无法更改代码以使其正常工作。
https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html?highlight=loop#with-sequence
TASK [: with_sequence] **************************************************************************************************************************************************************************
ok: [server] => (item=testuser00) => {
"msg": "testuser00"
}
ok: [server] => (item=testuser02) => {
"msg": "testuser02"
}
ok: [server] => (item=testuser04) => {
"msg": "testuser04"
}
TASK [: with_sequence -> loop] ******************************************************************************************************************************************************************
ok: [server] => (item=0) => {
"msg": "testuser00"
}
ok: [server] => (item=2) => {
"msg": "testuser02"
}
ok: [server] => (item=4) => {
"msg": "testuser04"
}
答案 0 :(得分:1)
直接传递列表,而不将其作为包含要循环列表的列表项
- debug:
msg: "{{ item }}"
loop: "{{ lookup('pipe','echo -e \"pro.json\npre.json\ndev.json\"').split('\n') }}"
有关更多信息,请参见https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html