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 在一组主机上运行,​​但取决于其他人的事实的主要内容,如果未能解决你的问题,请参考以下文章

3Ansible playbooks

3.3 ansible之playbook

Ansible 小手册系列 九(Playbook)

自动化运维工具之Ansible——剧本

playbook

自动化运维工具ansible Playbook介绍