【发布时间】:2016-05-10 15:56:26
【问题描述】:
我想强制 Ansible 在 playbook 中收集有关主机的事实(以在角色内部使用这些数据),而不考虑 --limit,但不知道如何。
我有这样的剧本:
- hosts: postgres_access
tasks:
- name: Gathering info
action: setup
- hosts: postgres
roles:
- postgres
在 'postgres' 角色中,我有一个模板可以遍历默认 IP:
{% for host in groups['postgres_access'] %}
host all all {{hostvars[host].ansible_default_ipv4.address}}/32 md5
{% endfor %}
这就像魔术一样,但前提是我在没有 --limit 的情况下运行我的剧本。如果我使用 --limit 它会中断,因为主机组中的某些主机没有收集到的事实。
ansible-playbook -i testing db.yml --limit postgres
失败:[pgtest] (item=pg_hba.conf) => {"failed": true, "item": "pg_hba.conf", "msg": "AnsibleUndefinedVariable: 'dict object' 没有属性 'ansible_default_ipv4 '"}
我怎样才能让 --limit 只重新配置 postgres 主机,并获得来自其他主机的网络数据(不做所有其他配置工作?)。
【问题讨论】:
-
您是否尝试过不同的方法,例如标记您的 postgres 任务并指定
--tags postgres?这样,您就不会受到库存组的限制,而是按特定任务来限制 -
是的,我想我会使用标签。对于“配置单个主机”的情况(就像它经常使用的那样),它仍然无济于事。
-
为解决这个问题做了一个任务,我把它放在
roles/postgres/tasks/main.yml文件中,但我敢打赌,如果你从剧本中运行它,这个位置就无关紧要了。在底部查看我的答案。
标签: postgresql ansible ansible-playbook ansible-facts