如何循环Ansible $ var次数?
问题描述:
我想在Ansible中运行一个循环,其中定义了在变量中的次数。这可能以某种方式吗?
想象一下服务器列表,我们希望在每台服务器上创建一些编号的文件。这些值在vars.yml定义:
server_list:
server1:
name: server1
os: Linux
num_files: 3
server2:
name: server2
os: Linux
num_files: 2
我想要的输出是文件/tmp/1
,/tmp/2
和/tmp/3
都在Server1上,/tmp/1
创建和/tmp/2
的Server2上创建的。我曾尝试使用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的一种自我失败的使用。
答
有一个在文档的一章:Looping over Integer Sequences
您的任务:
- file:
state: touch
path: /tmp/{{ item }}
with_sequence: start=1 end={{ server_list[target].num_files }}