首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带动态变量的不可测回路任务

带动态变量的不可测回路任务
EN

Stack Overflow用户
提问于 2019-04-04 14:24:55
回答 1查看 1.7K关注 0票数 3

我想用Ansible动态地在主机上设置DNS主地址。下面的主机组在X主机上应该是可扩展的,并且应该继续使用这个"dns条目循环“(参见下面的列表)。

我的Ansible库存中有以下服务器:

代码语言:javascript
复制
[yst-ad-server]
server1
server2
server3

我想为这样的服务器设置DNS入口:

代码语言:javascript
复制
Server:     Primary DNS:
server1 --> server3
server2 --> server1
server3 --> server2

如果没有循环,我的任务就可以工作,如下所示:

代码语言:javascript
复制
- name: Select all AD Servers (but the first in group) and set their DNS server to the first server in group (usually the master)
  win_dns_client:
    adapter_names: '*'
    ipv4_addresses: "{{ hostvars[groups[environment_name + '-ad-server'][-1]].ansible_host }}"
  when: inventory_hostname == groups[environment_name + '-ad-server'][0]

(Environment_Name是我在运行剧本时设置的变量。在这种情况下,我将使用"-e environemnt_name=yst“来匹配上面提到的库存组。)

这个部分获取server3的IP (最后一个组,所以我使用-1),并在组中的第一个主机(0)上设置它,当当前主机的主机名匹配时,它就是server1。

经过一些研究和测试,我现在要说的是:

代码语言:javascript
复制
- name: name
  win_dns_client:
    adapter_names: '*'
    ipv4_addresses: "{{ hostvars[groups[environment_name + '-ad-server'][item]].ansible_host }}"
  when: inventory_hostname == groups[environment_name + '-ad-server'][item + 1]
  loop: "{{ range(-1, 3)|list }}"

不幸的是,这是行不通的。我得到的错误是:

代码语言:javascript
复制
The conditional check 'inventory_hostname == groups[environment_name + '-ad-server'][item + 1]' failed. The error was: error while evaluating conditional (inventory_hostname == groups[environment_name + '-ad-server'][item + 1]): list object has no element
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-05 01:46:22

您的范围有太多的积极元素:索引3不存在。

由于您希望支持X个服务器数量,而不是固定硬编码值,所以动态地为组中的服务器数量创建范围。

range( -1, groups[environment_name + '-ad-server'] | length -1 ) | list

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55518418

复制
相关文章

相似问题

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