如何在Ansible游戏中列出所有当前目标主机

时间:2015-02-25 01:19:25

标签: ansible ansible-playbook

我正在运行Ansible游戏,并希望列出它所针对的所有主机。 Ansible docs mentions that this is possible,但他们的方法似乎不适用于复杂的目标群体(定位类似主机:web_servers:& data_center_primary)

我确信这是可行的,但似乎无法找到任何进一步的文档。是否存在所有当前目标主机的变量?

2 个答案:

答案 0 :(得分:26)

您正在寻找' play_hosts'变量

---
- hosts: all

  tasks:
    - name: Create a group of all hosts by app_type
      group_by: key={{app_type}}

    - debug: msg="groups={{groups}}"
      run_once: true

- hosts: web:&some_other_group

  tasks:
   - debug: msg="play_hosts={{play_hosts}}"
     run_once: true

会导致

TASK: [Create a group of all hosts by app_type] *******************************
changed: [web1] => {"changed": true, "groups": {"web": ["web1", "web2"], "load_balancer": ["web3"]}}

TASK: [debug msg="play_hosts={{play_hosts}}"] *********************************
ok: [web1] => {
    "msg": "play_hosts=['web1']"
}

清单:

[proxy]
web1 app_type=web
web2 app_type=web
web3 app_type=load_balancer

[some_other_group]
web1
web3

答案 1 :(得分:20)

您可以使用选项--list-hosts仅列出剧本会影响的主机。

此外,还有dict hostvars,其中包含Ansible当前已知的所有主机。但我认为setup模块必须在所有主机上运行,​​因此您不能通过gather_facts: no跳过该步骤。