Ну, закажите своего хозяина так, как вы хотите, в инвентаре, поставьте gather_facts: yes
и run_once: yes
задач, и у вас все хорошо go:
---
- hosts: all
gather_facts: yes
tasks:
- debug:
var: ansible_hostname
run_once: yes
Запустите это playbook на множестве хостов, причем первые несколько в вашем списке выключены, и вы увидите, что задание выполняется только на первом хосте, который отвечает.
Другой вариант аналогичен предложенному Владимиром, но с использованием (отсутствие) результатов из gather_facts
:
---
- hosts: all
gather_facts: yes
tasks:
- set_fact:
first_good_host: "{{ ansible_play_hosts | map('extract', hostvars) | list | json_query(query) | first }}"
run_once: yes
delegate_to: localhost
vars:
query: "[?ansible_facts!=''].inventory_hostname"
- debug:
var: first_good_host
delegate_to: localhost
- add_host:
name: '{{ first_good_host }}'
groups: 'reachable'
run_once: yes
- hosts: reachable
gather_facts: yes
tasks:
- debug:
msg: "{{ inventory_hostname }}"
Удачи!