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
我有一个在 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