我的懒惰有问题。
我有一份类似的任务列表。它们只是名称不同。假设它是一个文件夹名称。
---
- vars:
folders:
- folder1
- folder2
- etc
hosts:
- host1
- host2
- etc
我想以某种方式在主机之间分发'文件夹'。例如循环赛。
我希望在角色扮演手册中有类似的内容:
- name: Create folder
file: path={{item}} state=directory
use_next_from: folders
如何为ansible表达'use_next_from'?谢谢!
答案 0 :(得分:0)
如果你只是想在一堆主机上创建一堆文件夹,那么你真的只需要创建一个常规任务并在所有主机上运行它:
- hosts: all
tasks:
- name: create folder
file: path={{ item }} state=directory
with_items: folders
如果您需要创建嵌套循环以在每个主机上执行更复杂的操作,那么您可以使用with_nested构造:
vars:
folders:
- folder1
- folder2
files:
- file1
- file2
tasks:
- name: create folder
file: path={{ item }} state=directory
with_items: folders
- name: create files in each folder
file: path={{ item[0] }}/{{ item[1] }} state=touch
with_nested:
- folders
- files
如果你想做某事"循环赛"风格那么它会变得更加困难。 Ansible旨在执行所有已定义主机上的所有任务。你可能需要做一些相当复杂的事情:
vars:
folders:
- folder1
- folder2
files:
- file1
- file2
tasks:
- name: create folder
file: path={{ item[0] }} state=directory
when: ansible_inventory_hostname == item[1]
with_nested:
- folders
- hosts
答案 1 :(得分:0)
你想要循环。 RTM on loops
如果布鲁斯的帖子没有回答你的问题,那么也许你想要Looping over Parallel Sets of Data。
答案 2 :(得分:0)
自Ansible 2.5起,loop_control
有index_var
指令。然后,您可以执行以下操作:
---
- vars:
folders:
- folder1
- folder2
- etc
hosts:
- host1
- host2
- etc
- tasks:
- name: Create folder
file:
path: "{{item}}"
state: directory
loop: "{{folders}}"
loop_control:
index_var: index
when: inventory_hostname == hosts[index % hosts|length]
例如,当您要从清单中定位主机组时,可以在hosts
语句中将groups.example
替换为when
。