gpt4 book ai didi

ansible - 如何将 Ansible with_items 循环应用于包含的任务?

转载 作者:行者123 更新时间:2023-12-04 12:39:35 25 4
gpt4 key购买 nike

documentation for import_tasks 提及

Any loops, conditionals and most other keywords will be applied to the included tasks, not to this statement itself.



这正是我想要的。不幸的是,当我尝试制作 import_tasks 时使用循环
- import_tasks: msg.yml
with_items:
- 1
- 2
- 3

我收到消息

ERROR! You cannot use loops on 'import_tasks' statements. You should use 'include_tasks' instead.



我不想要 include_tasks行为,因为这将循环应用于包含的文件,并复制任务。我特别想为每个循环变量运行第一个任务(作为一个带有标准 with_items 输出的任务),然后是第二个,依此类推。我怎样才能得到这种行为?

具体来说,请考虑以下几点:

假设我有以下文件:

剧本.yml
---                       

- hosts: 192.168.33.100
gather_facts: no
tasks:
- include_tasks: msg.yml
with_items:
- 1
- 2

msg.yml
---

- name: Message 1
debug:
msg: "Message 1: {{ item }}"

- name: Message 2
debug:
msg: "Message 2: {{ item }}"

我希望打印的消息是

Message 1: 1
Message 1: 2
Message 2: 1
Message 2: 2



但是,与 import_tasks我收到一个错误,并使用 include_tasks我得到

Message 1: 1
Message 2: 1
Message 1: 2
Message 2: 2

最佳答案

您可以添加 with_items循环获取导入文件中每个任务的列表,并调用 import_tasks使用您传递给内部 with_items 的变量环形。这会将循环的处理移至导入的文件,并且需要在所有任务上重复循环。

鉴于您的示例,这会将文件更改为:

剧本.yml

---

- hosts: 192.168.33.100
gather_facts: no
tasks:
- import_tasks: msg.yml
vars:
messages:
- 1
- 2

msg.yml
---

- name: Message 1
debug:
msg: "Message 1: {{ item }}"
with_items:
- "{{ messages }}"

- name: Message 2
debug:
msg: "Message 2: {{ item }}"
with_items:
- "{{ messages }}"

关于ansible - 如何将 Ansible with_items 循环应用于包含的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47352361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com