with_items之间的迁移以循环

时间:2019-06-10 09:54:25

标签: ansible

我正在尝试将一些代码从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"
}

1 个答案:

答案 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