Как перечислить все целевые хосты в Ansible play
Я запускаю Ansible play и хотел бы перечислить все хосты, на которые он нацелен. Ansible docs упоминает, что это возможно, но их метод, похоже, не работает со сложной целевой группой (таргетинг, такой как hosts: web_servers:&data_center_primary)
Я уверен, что это выполнимо, но, похоже, не может найти никакой дополнительной документации по нему. Есть ли var со всеми текущими целевыми хостами?
2 ответов
вы ищете переменную "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
вы можете использовать опцию --list-hosts
только список хостов playbook повлияет.
кроме того, есть дикт hostvars
который содержит все хосты, известные в настоящее время Ansible. Но я думаю, что setup
модуль должен быть запущен на всех хостах, поэтому вы не сможете пропустить этот шаг через gather_facts: no
.