[英]How to access group variables from inventory file inside ansible yaml
我有一个清单文件,其中一组如下所示:
[example1]
H1 ip1 username1
H2 ip2 username2
H3 ip3 username3
我已经定义了如下组变量,以使该变量对该组中的所有主机通用:
[example1:vars]
temp='H2'
我正在尝试在主机字段下的 ansible yml 中访问此变量,如下所示:
---
- name: temp playbook to practice hostvars
hosts: "{{ hostvars['example1']['temp'] }}"
tasks:
.....
.....
....
但是在执行此剧本时,我收到了如下所示的主机变量未定义错误:
"ERROR! The field 'hosts' has an invalid value, which includes an undefined variable. The error was: 'hostvars' is undefined"
我的 ansible 文件和清单文件在同一个文件夹中,有人能帮我纠正我缺少的东西来访问清单文件中的变量吗?
请不要那样做。 这是糟糕的方式。 使用具有 'children' 属性的组进行主机分组。
不过,这里有一个解决您的问题的方法。 您已尝试访问组的主机变量。 您的清单中没有主机“example1”。 正如您所见,主机变量具有主机变量。
以下代码可以解决问题:
- hosts: localhost
gather_facts: no
tasks:
- debug:
- hosts: '{{ hostvars[groups.example1[0]].temp }}'
tasks:
...
我使用groups.example1
获取组example1
中的主机列表,然后获取该组的第一个成员 ( [0]
),然后通过hostvars
查看其变量。
开始时debug
的奇怪任务需要帮助 Ansible 初始化hostvars
。 没有它,它将因未定义的变量错误而失败。
但是,再一次,不要那样做。 这真的,真的很糟糕,重塑团体的方式。
我知道这是一个老问题,但刚刚找到了这个问题的解决方案。 只需在下一个任务或角色中使用 hostvars 之前放置它,您就可以以某种方式将 hostvars 变量用于 hosts: 定义。
- name: Do nothing
hosts: all
gather_facts: no
become: no
似乎不需要 run_once: 是的(也许只是为了一些性能改进,如果有的话)我不能说我理解引擎盖下的东西,但似乎 ansible (2.9, 2.10) 需要一些虚假的东西才能在下一个任务/角色中使用 hostvars 变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.