Ansible没有看到ansible_eth1设备

时间:2015-09-12 23:34:02

标签: 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": {
                "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任务之前运行,以处理模板。

我想要完成的是将新节点添加到现有群集中。

2 个答案:

答案 0 :(得分:4)

因为当您运行{% for host in groups['seeds'] %}时,特定主机无法访问组seeds中其他主机的变量,因此任务失败。

要访问其他主机的变量,您应该启用fact caching

在Playbook文件中,您应该添加gather_facts: True来更新事实。

答案 1 :(得分:0)

另一个提醒:当主机需要其他主机的变量时,请勿将ansible-playbook命令中的主机限制为特定主机!

ansible-playbook -l 'node1' hosts.yml 

无法从'all'中找到其他主机的ansible_eth1,因此应该

ansible-playbook hosts.yml