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

Ansible - Delegate single task to a group of hosts where the inventory groupname contains a variable

我有一个在 server1 上运行的 ansible 任务(服务器在组 "yst-ad-server" 中)。它应该从 hostvars 中获取主机 IP 地址并将其设置在 server2 上作为 DNS 地址。 Server2 在组 "yst-terminal-server" 中。部分 yst 是动态的,所以它会被定义在一个变量中 while 运行 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 不允许变量中包含变量。



编辑
我已经看过评论中提到的 link 但还没有成功:

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

导致错误:

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

解决办法是通过以下方式查找变量:

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

感谢@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