Ansible play 在一组主机上运行,但取决于其他人的事实
Posted
技术标签:
【中文标题】Ansible play 在一组主机上运行,但取决于其他人的事实【英文标题】:Ansible play runs on one group of hosts, but depends on facts from others 【发布时间】:2017-07-10 13:32:12 【问题描述】:这是基本用例:
我想要设置一个 nginx 反向代理,因此我指定了一个仅在“nginx”组上运行的游戏。
但是,为了知道反向代理的 ips,我需要从“上游”组收集事实。这不会发生,因为播放没有在“上游”上运行 setup
。
This answer 包含我以前使用过的解决方案,但我希望能够将其全部包含在一个主机游戏中,我可以独立于其他人运行。
【问题讨论】:
你是如何独立于其他人运行的? @techraf 有很多方法,比如--start-at-task=START_AT_TASK
和--tags
。或者,如果我将执行限制在某些主机上。 (我实际上认为这些剧本确实会运行,但如果您使用 start-at 或标签,它就不会执行任何任务。)
【参考方案1】:
使用Delegated Facts、pre_tasks
,并将事实委托给它们所属的主机。
- hosts: nginx
become: yes
tags:
- nginx
vars:
listen_address: "x.x.x.x"
pre_tasks:
- name: 'gather upstream facts.'
setup:
delegate_to: "item"
delegate_facts: True
with_items: "groups['upstreams']"
roles:
- role: nginx
upstreams: " groups['upstreams'] | map('extract', hostvars, ['ansible_all_ipv4_addresses']) | ipaddr('x.x.x.x') | first | list "
【讨论】:
以上是关于Ansible play 在一组主机上运行,但取决于其他人的事实的主要内容,如果未能解决你的问题,请参考以下文章