我正在使用Ansible,在运行我的playbook之后,我得到了这个错误。
这是我的策略:
---
- 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这是我的模板
# 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上的城市企鹅的主机文件,查找它
发布于 2020-10-02 02:11:30
感谢@Jack @Zeitounator,这个问题已经在我的清单上了。显然,如果您在清单中保留了一台不使用的服务器,例如,我的清单是
10.0.2.4:7
但我关闭了我的7机器,一旦我移走并使我的库存如下
10.0.2.4:6开始工作。
所以我猜测,如果您的清单中列出了一台不再使用的计算机,那么它可能会导致魔法变量的问题。
我的教训是保持库存文件的整洁。
谢谢
发布于 2021-01-19 07:30:55
必须指定hosts:all
gathering:这只影响play的gather_facts指令完成的gathering,
https://stackoverflow.com/questions/64147785
复制相似问题