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

xab*_*ram 25 ansible ansible-playbook

我正在运行Ansible游戏,并希望列出它所针对的所有主机.Ansible文档提到这是可能的,但他们的方法似乎不适用于复杂的目标群体(针对主机:web_servers:&data_center_primary)

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

sir*_*bax 30

您正在寻找'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
Run Code Online (Sandbox Code Playgroud)

会导致

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']"
}
Run Code Online (Sandbox Code Playgroud)

库存:

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

[some_other_group]
web1
web3
Run Code Online (Sandbox Code Playgroud)

  • `play_hosts`是[从2.2开始](https://docs.ansible.com/ansible/playbooks_variables.html).你现在可以使用`ansible_play_batch` (8认同)

udo*_*dan 22

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

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