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

时间:2017-11-17 14:01:02

标签: ansible

documentation for import_tasks提及

  

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

这正是我想要的。不幸的是,当我尝试使import_tasks使用循环

- import_tasks: msg.yml
  with_items:
    - 1
    - 2
    - 3

我收到了消息

  

ERROR!你不能在' import_tasks'上使用循环。声明。你应该使用' include_tasks'代替。

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

具体来说,请考虑以下事项:

假设我有以下文件:

playbook.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 }}"

我希望打印的消息是

  消息1:1   消息1:2
  消息2:1
  消息2:2

但是,import_tasks我收到错误,而include_tasks收到错误

  消息1:1   消息2:1
  消息1:2
  消息2:2

2 个答案:

答案 0 :(得分:1)

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

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

playbook.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 }}"

答案 1 :(得分:0)

这是不可能的。 spark.streaming.kafka.maxRatePerPartition=1 spark.streaming.backpressure.enabled=true spark.streaming.backpressure.pid.minRate=1 spark.streaming.receiver.maxRate=2 / include语句作为一个整体与任务文件一起运行。

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

import