Ansible未看到Ansible_eth1设备
鉴于此调试:Ansible未看到Ansible_eth1设备,ansible,Ansible,鉴于此调试: - name: Display all variables/facts known for a host debug: var=hostvars[inventory_hostname] 部分产生这种输出: ok: [ny2-uat-app02] => { "var": { "hostvars[inventory_hostname]": { ... "ansible_eth1": {
- name: Display all variables/facts known for a host
debug: var=hostvars[inventory_hostname]
部分产生这种输出:
ok: [ny2-uat-app02] => {
"var": {
"hostvars[inventory_hostname]": {
...
"ansible_eth1": {
"active": true,
"device": "eth1",
"ipv4": {
...
},
"ipv6": [
{
...
}
],
...
为什么该行在模板中:
- seeds: "{% for host in groups['seeds'] %}{{ hostvars[host]['ansible_' + internode_interface]['ipv4']['address'] }}{% if not loop.last %},{% endif %}{% endfor %}"
产生此错误:
fatal: [ny2-uat-app02] => {'msg': "AnsibleUndefinedVariable: One or more undefined variables: 'dict object' has no attribute u'ansible_eth1'", 'failed': True}
调试任务正好在ansible任务之前运行,以处理模板
我试图完成的是向现有集群添加一个新节点。因为当您在组['seeds']%]中运行{%for host时,特定主机无法访问组seeds中其他主机的变量,因此任务失败
要访问其他主机的变量,应启用
在playbook文件中,您应该添加gather_facts:True以更新事实。另一个提醒:当某个主机需要来自其他主机的变量时,不要将ansible playbook命令中的主机限制为特定主机
ansible-playbook -l 'node1' hosts.yml
无法从“all”中找到来自其他主机的ansible_eth1,因此应
ansible-playbook hosts.yml
您启用了事实缓存吗?我启用了,但是最初创建集群时在一个目录中,而创建附加节点的文件则在另一个目录中。这都是因为vagrant命令不允许指定输入文件。我在第二个目录下复制了.vagrant/provisioners/ansible/facts,并能够添加新节点。这对facter\u ipaddress有帮助吗?在我的例子中,一个映像是CentOS 6.5,另一个是CentOS x.x,使用ansible_eth[1or5]。ipv[4or6]。ipaddress在收集事实时可用:True,但在其他VM中,它不像您的例子那样填充。我使用了facter_ipaddress,它很有效。@ArunSangal-有趣,我不知道。不知道我什么时候能回来试试这个。