我试图从一个只在一个组中运行的剧本中获取我的库存文件中所有主机的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 回答
要获得对hostvars中所有主机的访问权限,首先必须为所有主机创建任务 . 我创建了一个简单的角色,可以简单地回应所有主机上的内容 . 然后,此角色强制在所有主机上收集事实,并将每个主机添加到hostvars组 .
请注意,如果您随后使用标签限制运行playbook,则会再次影响hostvars组 .
我在这里得到了提示:https://groups.google.com/forum/#!msg/Ansible-project/f90Y4T4SJfQ/L1YomumcPEQJ
特殊变量
groups
可能就是你想要做的,在你的情况下,groups
的值将是:你可以在你的jinja模板中循环 .