首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AnsibleUndefinedVariable:“ansible.vars.hostvars.HostVarsVars object”没有特性

AnsibleUndefinedVariable:“ansible.vars.hostvars.HostVarsVars object”没有特性
EN

Stack Overflow用户
提问于 2020-10-01 09:11:57
回答 2查看 7.6K关注 0票数 1

我正在使用Ansible,在运行我的playbook之后,我得到了这个错误。

这是我的策略:

代码语言:javascript
复制
---
- name: Set 192.168.122.4 Hostname
  hosts: 192.168.122.4
  gather_facts: false
  become: true
  tasks:
    - name : Name 4
      hostname:
        name:  ansible1.example.com

- name: Set 192.168.122.5 Hostname
  hosts: 192.168.122.5
  gather_facts: false
  become: true
  tasks:
    - name : Name 5
      hostname:
        name: ansible2.example.com

- name: Manage Hosts File
  hosts: all
  gather_facts: true
  become: true
  tasks:
    
    - name: Deploy Hosts Template
      template:
        src: hosts.j2
        dest: /etc/hosts

这是我的模板

代码语言:javascript
复制
# Managed by Ansible
127.0.0.1 localhost
{% for host in groups['all'] %}
{{ hostvars[host]['ansible_default_ipv4']['address'] }} {{ hostvars[host]['ansible_fqdn'] }} {{ hostvars[host]['ansible_hostname'] }}
{% endfor %}

我得到了这个错误:

AnsibleUndefinedVariable: 'ansible.vars.hostvars.HostVarsVars object' has no attribute 'ansible_default_ipv4

我尝试使用debug模块查看是否从ansible_default_ipv4获得响应,并在那里获得一个包含地址的列表,这正是我想要的。所以不是说远程服务器没有这样的设置,他们有,信息就在那里,但是我如何检索它,以便我可以填充这个/etc/hosts文件。

但我发现这与ansible_default_ipv4本身无关,因为它会对另一个对象产生相同的错误。

所以我猜测这与模板中的这些神奇变量有关。

我的推荐人是:

RHCE8- Ansible RHCE -使用Jinja模板填充YouTube上的城市企鹅的主机文件,查找它

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-02 02:11:30

感谢@Jack @Zeitounator,这个问题已经在我的清单上了。显然,如果您在清单中保留了一台不使用的服务器,例如,我的清单是

10.0.2.4:7

但我关闭了我的7机器,一旦我移走并使我的库存如下

10.0.2.4:6开始工作。

所以我猜测,如果您的清单中列出了一台不再使用的计算机,那么它可能会导致魔法变量的问题。

我的教训是保持库存文件的整洁。

谢谢

票数 4
EN

Stack Overflow用户

发布于 2021-01-19 07:30:55

必须指定hosts:all

gathering:这只影响play的gather_facts指令完成的gathering,

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

https://stackoverflow.com/questions/64147785

复制
相关文章

相似问题

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