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-有趣,我不知道。不知道我什么时候能回来试试这个。