首页 > 解决方案 > 在 playbook with_items 中运行所有任务

问题描述

我希望剧本对列表中的每个项目而不是列表中的所有项目一次运行一次。

Ansible 版本:2.6.1

Tasks.yaml

 ---

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

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

剧本:

- hosts: localhost
  gather_facts: no
  tasks:
  - import_tasks: Tasks.yml
    vars:
      messages:
        - 1
        - 2

这是我的预期结果:

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

但是当我执行剧本时,它是这样的:

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

我尝试了 import 和 include - 两者都有相同的结果。

标签: ansible

解决方案


playbook.yml应该实现一个循环(注意你不能用 循环import_tasks;它会引发错误):

- hosts: localhost
  connection: local
  gather_facts: no

  vars:
    messages:
      - 1
      - 2
      - 3

  tasks:
    - include_tasks: Tasks.yml
      loop: "{{ messages }}"

Tasks.yml应该看起来像这样(里面没有循环):

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

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

推荐阅读