Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Ansible with_items循环应用于包含的任务?_Ansible - Fatal编程技术网

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

如何将Ansible with_items循环应用于包含的任务?,ansible,Ansible,提及 任何循环、条件和大多数其他关键字都将应用于包含的任务,而不是此语句本身 这正是我想要的。不幸的是,当我试图使import\u任务与循环一起工作时 - import_tasks: msg.yml with_items: - 1 - 2 - 3 我明白了 错误!不能在“导入任务”语句上使用循环。您应该改用“包含任务” 我不希望出现include_tasks行为,因为这会将循环应用于包含的文件,并复制任务。我特别希望为每个循环变量运行第一个任务(作为一个带有标准和\

提及

任何循环、条件和大多数其他关键字都将应用于包含的任务,而不是此语句本身

这正是我想要的。不幸的是,当我试图使
import\u任务
与循环一起工作时

- import_tasks: msg.yml
  with_items:
    - 1
    - 2
    - 3
我明白了

错误!不能在“导入任务”语句上使用循环。您应该改用“包含任务”

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


具体而言,考虑以下几点:

假设我有以下文件:

playbook.yml

---                       

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

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

---

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

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

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

- name: Message 2
  debug:
    msg: "Message 2: {{ item }}"
  with_items:
    - "{{ messages }}"
我想把打印出来的信息

信息1:1
信息1:2
信息2:1
信息2:2

但是,使用
import\u tasks
我会得到一个错误,而使用
include\u tasks
我会得到一个错误

信息1:1
信息2:1
信息1:2
信息2:2


这是不可能的
include
/
import
语句将任务文件作为一个整体进行操作

因此,对于循环,您将有:

Task 1 with Item 1
Task 2 with Item 1
Task 3 with Item 1
Task 1 with Item 2
Task 2 with Item 2
Task 3 with Item 2
Task 1 with Item 3
Task 2 with Item 3
Task 3 with Item 3

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


根据您的示例,这会将文件更改为:

playbook.yml

---                       

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

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

---

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

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

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

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

请重新表述您的要求。。。举个例子吧?我在msg.yml中有很多任务。如果我使用include_tasks,它将使用项目1运行任务1,然后使用项目1运行任务2,然后使用任务3。。。我想要任务1和项目1,然后任务1和项目2,然后任务1和项目3…但说实话,文件中的措辞说明了相反的情况。写这篇文章的人太有想象力了。