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'] }}"
我知道这里有嵌套循环文档: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'] }}"