如何遍历主机组以提供动态值

时间:2020-08-09 09:31:48

标签: ansible

我的库存如下

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文件中。

2 个答案:

答案 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上重新运行