Регистровая переменная Ansible не определена

#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 , поскольку команда является чисто информативной и никогда не изменит систему. оболочка / команда всегда возвращает «изменено» по умолчанию всякий раз, когда команда выполняется успешно.