首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible -将单个任务委托给一组主机,其中库存组名称包含一个变量。

Ansible -将单个任务委托给一组主机,其中库存组名称包含一个变量。
EN

Stack Overflow用户
提问于 2019-04-02 11:12:44
回答 2查看 3.8K关注 0票数 0

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

如何使用它将其委托给server2?到目前为止,我已经知道了这一点,但是Ansible没有得到主机,它说它不能连接到主机“组‘’yst终端-服务器‘”:

代码语言:javascript
复制
- 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

我真正想要的是这样:

代码语言:javascript
复制
with_items: '{{ groups.{{env}}-terminal-server }}'

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

编辑

我已经看过评论中提到的这一链接,但尚未取得任何成功:

代码语言:javascript
复制
- debug: msg="{{ (lookup('vars', env))-terminal-server }}"

导致错误:

代码语言:javascript
复制
The error was: No variable found with this name: yst
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-02 11:53:31

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

代码语言:javascript
复制
{{ groups[env + '-terminal-server' ] }}
票数 2
EN

Stack Overflow用户

发布于 2019-04-02 12:17:00

多亏了@Istvan,我的问题的解决方案如下:

代码语言:javascript
复制
- 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55473377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档