#ansible
#ансибль
Вопрос:
Перед запуском сборника исправлений я запустил сборник с опцией «—check» в качестве пробного запуска. Однако одна из пьес в сборнике пьес, чтобы проверить, нужна ли группе перезагрузка, не регистрирует переменную «reboot_hint», как предполагалось
- name: check for reboot
shell: needs-restarting -r
register: reboot_hint
failed_when: reboot_hint.rc > 1
- name: debug, show the reboot hint variable
debug:
var:
- reboot_hint.rc
- reboot_hint
Я получаю сообщение: «ПЕРЕМЕННАЯ НЕ ОПРЕДЕЛЕНА!»» для запуска.
Что может быть причиной этого? Я ожидаю возвращаемое значение «1» или «0». Я понимаю, что когда я захожу в командную строку, запускаю «needs-restarting -r» и «echo $?
No core libraries or services have been updated.
Reboot is probably not necessary.
> echo $?
0
Ответ №1:
Вы работаете --check
и, следовательно, команда оболочки не выполняется. Поскольку команда оболочки не выполняется, регистрировать нечего.
Вы можете прочитать больше об этом в https://docs.ansible.com/ansible/latest/user_guide/playbooks_checkmode.html#enabling-or-disabling-check-mode-for-tasks
Простым исправлением является добавление check_mode: no
, например
- name: check for reboot
check_mode: no
shell: needs-restarting -r
register: reboot_hint
failed_when: reboot_hint.rc > 1
Это заставляет задачу выполняться даже при включенном режиме проверки.
Комментарии:
1. Обратите внимание, что для идемпотентности вам также следует добавить
changed_when: false
, поскольку команда является чисто информативной и никогда не изменит систему. оболочка / команда всегда возвращает «изменено» по умолчанию всякий раз, когда команда выполняется успешно.