Я собирался опубликовать вопрос, когда я увидел это. Ответ, предложенный Дунканом, не работает, по крайней мере, в моем случае. хост недоступен. Все мои плейбуки указывают max_fail_percentage равным 0.
Но ansible с радостью выполнит все задачи на хостах, до которых он сможет добраться, и выполнит действие. Чего я действительно хотел, так это того, что если какой-либо из хостов недоступен, не выполняйте никаких задач.
То, что я нашел, было простым, но его можно было бы считать хакерским решением и открытым для лучших ответов.
Начиная с первого шага в рамках запуска плейбуков, ansible собирает факты для всех хостов. И в случае, когда хост недоступен, он не сможет. Я пишу простую пьесу в самом начале моей пьесы, в которой используется факт. И в случае, если хост недоступен, эта задача завершится с ошибкой «Неопределенная переменная». Задача является просто фиктивной и всегда будет проходить, если все хосты доступны.
Смотрите ниже мой пример:
- 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
, вы должны изменить фиктивную задачу, чтобы она отражала это имя.
person
Zoro_77
schedule
03.07.2015