【发布时间】:2017-09-03 03:10:18
【问题描述】:
我想在 Ansible 中运行一个循环的次数,该次数是在 in 一个变量中定义的。这有可能吗?
想象一个服务器列表,我们想在每个服务器上创建一些编号的文件。这些值在 vars.yml 中定义:
server_list:
server1:
name: server1
os: Linux
num_files: 3
server2:
name: server2
os: Linux
num_files: 2
我想要的输出是在 server1 上创建文件 /tmp/1、/tmp/2 和 /tmp/3,在 server2 上创建 /tmp/1 和 /tmp/2。我曾尝试使用with_nested、with_dict 和with_subelements 编写剧本,但我似乎找不到任何方法:
- hosts: "{{ target }}"
tasks:
- name: Load vars
include_vars: vars.yml
- name: Create files
command: touch /tmp/{{ loop_index? }}
with_dict: {{ server_list[target] }}
loop_control:
loop_var: {{ item.value.num_files }}
如果我需要在每台服务器上创建 50 个文件,我可以看到如果我要为每台服务器都有一个列表变量,其中包含 50 个项目,列表中只是数字 1 到 50,那么我可以如何做到这一点,但这会对 Ansible 进行自我打击。
【问题讨论】:
标签: loops dictionary ansible nested-loops