我的库存如下
group1:
host001:
host002:
group2:
host101:
host102:
现在我想遍历这两个组中的任何一个,例如通过参数进行控制。
- hosts: localhost
vars:
target: group1
- name: Do something for an inventory group
include_tasks: sample-play.yml
loop: "{{ groups['{{ target }}'] }}"
那有可能吗?如果是,怎么办?我尝试过
loop: "{{ groups['{{ target }}'] }}"
和
loop: "{{ groups.{{ target }} }}"
均以以下错误结尾:
fatal: [localhost]: FAILED! => {"msg": "template error while templating string: expected name or number. String: {{ groups.{{ target }} }}"}
我要实现的是修改本地文件并为组中的每个主机添加一个条目。具体来说,我想将组中每个主机的代理条目添加到ssh config
文件中。
答案 0 :(得分:2)
修复语法
loop: "{{ groups[target] }}"
扩展不能嵌套"{{ {{ }} }}"
。
答案 1 :(得分:0)
默认情况下,Ansible为给定的主机组(由ansible.cfg
控制)分叉播放。好像您要顺序执行任务,就像遍历整个组一样。
有许多控制playbook execution的方法。
如果要在组中的主机上顺序运行任务,可以使用以下serial
关键字:
- hosts: group1
serial: 1
tasks:
- name: Do something for an inventory group
include_tasks: sample-play.yml
这将使Ansible首先在sample-play.yml
上运行host001
,然后在host002
上重新运行