首页 文章

从组剧本访问整个Ansible Inventory

提问于
浏览
3

我试图从一个只在一个组中运行的剧本中获取我的库存文件中所有主机的IP列表 .

假设以下库存文件:

[dbservers]
db1.example.com
db2.example.com

[webservers]
www1.example.com
www2.example.com

和剧本:

---

- hosts: dbservers
  roles:
  - dosomething

和dosomething角色:

- name: print all host ips
  template: src=hosts.j2 dest=/tmp/hosts.txt

和hosts.j2模板:

{% for host in hostvars %}

{{ hostvars[host].ansible_eth0.ipv4.address }}

{% endfor %}

Problem:

运行这个时,我只得到列出的dbserver ip,而不是所有的ip

Question:

如何从本剧本中获取对整个广告资源的访问权限?在剧本中将主机更改为 all ,但是dosomething playbook也可以在所有主机上运行,这不是我想要的 . 我只想要dbservers上的列表 .

2 回答

  • 1

    要获得对hostvars中所有主机的访问权限,首先必须为所有主机创建任务 . 我创建了一个简单的角色,可以简单地回应所有主机上的内容 . 然后,此角色强制在所有主机上收集事实,并将每个主机添加到hostvars组 .

    请注意,如果您随后使用标签限制运行playbook,则会再次影响hostvars组 .

    我在这里得到了提示:https://groups.google.com/forum/#!msg/Ansible-project/f90Y4T4SJfQ/L1YomumcPEQJ

  • 2

    特殊变量 groups 可能就是你想要做的,在你的情况下, groups 的值将是:

    "groups" : {
        "dbservers": [
            "db1.example.com",
            "db2.example.com"
        ],
        "webservers": [
            "www1.example.com",
            "www2.example.com"
        ]
    }
    

    你可以在你的jinja模板中循环 .

相关问题