【问题标题】:Ansible - Delegate single task to a group of hosts where the inventory groupname contains a variableAnsible - 将单个任务委托给库存组名包含变量的一组主机
【发布时间】:2019-08-23 16:43:51
【问题描述】:

我有一个在 server1 上运行的 ansible 任务(服务器在组“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 不允许在变量中包含变量。



编辑
我已经看过 cmets 中提到的这个链接,但还没有成功:

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

导致错误:

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

【问题讨论】:

  • 可能与link重复
  • @Istvan 感谢您的输入,我更新了问题。不幸的是,这似乎不起作用。
  • {{ groups[env + '-terminal-server' ] }} ?
  • @Istvan 谢谢你,这很有魅力!
  • 很高兴我能帮上忙。 :)

标签: ansible task ansible-2.x delegation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 2017-06-04
      • 1970-01-01
      • 2017-03-22
      相关资源
      最近更新 更多