Ansible中的嵌套循环

Nested loop in Ansible

我知道这里有嵌套循环文档:http://docs.ansible.com/ansible/playbooks_loops.html#nested-loops 我有 3 个服务器:比如 server1、server2、server3。 我需要以这种方式 运行 命令:

服务器 1 上的

运行 命令
服务器 1 上的 运行 命令,服务器 2 上的 运行 命令
服务器 1 上的 运行 命令,服务器 2 上的 运行 命令,服务器 3 上的 运行 命令

知道如何在 ansible 中使用循环来做到这一点吗?我知道如何使用循环和乘积过滤器 运行 嵌套循环。但不知道如何使用 Ansible 处理我的特殊情况。

这取决于数据的结构。例如,剧本可以完成这项工作

- hosts: server1,server2,server3
  vars:
    batch001:
      - command: "foo"
        hosts: [server1]
      - command: "bar"
        hosts: [server1, server2]
      - command: "baz"
        hosts: [server1, server2, server3]
  tasks:
    - command: "{{ item.command }}"
      loop: "{{ batch001 }}"
      when: inventory_hostname in item.hosts

下一个选项是创建一个包含嵌套命令列表的服务器字典。例如,

- hosts: server1,server2,server3
  vars:
    batch002:
      server1:
        commands: ["foo", "bar", "baz"]
      server2:
        commands: ["foo", "bar"]
      server3:
        commands: ["foo"]
  tasks:
    - command: "{{ item }}"
      loop: "{{ batch002[inventory_hostname]['commands'] }}"