Я собирался отправить вопрос, когда я увидел это. Ответ, предложенный Дунканом, не работает, по крайней мере, в моем случае. хост недостижим. Все мои плейбуки определяют max_fail_percentage of 0.
Но незаметный человек с радостью выполнит все задачи на хостах, которые он сможет достичь и выполнить действие. Я действительно хотел, чтобы какой-либо из хостов был недоступен, не выполняйте никаких задач.
То, что я нашел, было простым, но может считаться хакерским решением и открытым для лучших ответов.
С первого шага, как часть запуска плейбуков, невозможно собрать факты для всех хостов. И в случае, если хост недоступен, он не сможет. Я пишу простую игру в самом начале моей пьесы, которая будет использовать факт. И если хост недоступен, эта задача завершится с ошибкой «Неопределенная переменная ошибка». Задача - всего лишь манекен и всегда будет проходить, если все хосты достижимы.
Ниже мой пример:
- name: Check Ansible connectivity to all hosts
hosts: host_all
user: "{{ remote_user }}"
sudo: "{{ sudo_required }}"
sudo_user: root
connection: ssh # or paramiko
max_fail_percentage: 0
tasks:
- name: check connectivity to hosts (Dummy task)
shell: echo " {{ hostvars[item]['ansible_hostname'] }}"
with_items: groups['host_all']
register: cmd_output
- name: debug ...
debug: var=cmd_output
В случае хост недоступен, вы получите сообщение об ошибке, как показано ниже:
TASK: [c.. *****************************************************
fatal: [172.22.191.160] => One or more undefined variables: 'dict object' has no attribute 'ansible_hostname'
fatal: [172.22.191.162] => One or more undefined variables: 'dict object' has no attribute 'ansible_hostname'
FATAL: all hosts have already failed -- aborting
Примечание: Если ваша группа хозяин не называется host_all
, вы должны изменить фиктивную задачу, чтобы отразить это имя.
Спасибо, я закончил тем, что использовал это как pretask [См. Gist] (https://gist.github.com/JakeDEvans/00aaaab051a9c234de7f32da1bb2b8c2) –