Ansible-将单个任务委托给清单组名称包含变量的一组主机

时间:2019-04-02 11:12:44

标签: ansible task ansible-2.x delegation

我有一个在server1上运行的任务(服务器在“ yst-ad-server”组中)。它应该从hostvars获取主机IP地址并将其在server2上设置为DNS地址。 Server2在“ yst-terminal-server”组中。 yst部分是动态的,因此它将在运行ansible时在变量中定义('-e“ env = xxx”')。

如何使用它将其委派给server2?到目前为止,我明白了这一点,但是Ansible没有得到主机,它说它无法连接到主机“ groups ['yst-terminal-server']”:

- name: name.
  win_dns_client:
    adapter_names: '*'
    ipv4_addresses: '{{ hostvars[inventory_hostname].ansible_host }}'
    where: inventory_hostname != groups['yst-ad-server'][-1]
  delegate_to: '{{ item }}'
  with_items: "groups['{{ env }}-terminal-server']"
  register: set_dns_ip

我真正想要的是这样的:

with_items: '{{ groups.{{env}}-terminal-server }}'

其中env包含“ yst”。但这是不可能的,因为Ansible不允许在变量中包含变量。



编辑
我已经看过评论中提到的此链接,但尚未成功:

- debug: msg="{{ (lookup('vars', env))-terminal-server }}"

导致错误:

The error was: No variable found with this name: yst

2 个答案:

答案 0 :(得分:1)

解决方案是按以下方式查找变量:

{{ groups[env + '-terminal-server' ] }}

答案 1 :(得分:1)

感谢@Istvan,我的问题的解决方案如下:

- name: name
  win_dns_client:
    adapter_names: '*'
    ipv4_addresses: '{{ hostvars[inventory_hostname].ansible_host }}'
    where: inventory_hostname != groups['yst-ad-server'][-1]
  delegate_to: '{{ item }}'
  with_items: "{{ groups[env + '-terminal-server' ] }}"
  register: set_dns_ip