Когда Ansible инициирует скрипт PowerShell, как заставить Ansible вернуть «ok» (ничего не изменилось)?

Когда Ansible инициирует скрипт PowerShell, как заставить Ansible вернуть «ok» (ничего не изменилось)?

Обычно, когда Ansible запускает скрипт PowerShell с помощью win_command/ win_shell/ win_psexec, то, если не возникают ошибки, он возвращает «изменено», поскольку, конечно, он не знает, что именно сделал скрипт.

Поскольку мы можем вернуть любой код выхода в скрипте PowerShell, есть ли способ, через коды выхода или иным образом, уведомить Ansible, что не требуется никаких изменений, чтобы Ansible вернул статус "ok"? Или он всегда будет возвращать "changed" несмотря ни на что (при условии отсутствия сбоев)?

решение1

Я думаю, я нашел это.win_powershellмодуль получает доступ к $Ansibleпеременной PowerShell, с помощью которой я могу изменить информацию, возвращаемую контроллеру.

Изwin_powershellдокументация:

  • $Ansible.Result— это значение, которое возвращается контроллеру как есть.
  • $Ansible.Diffбыл добавлен в выпуске ansible.windows 1.12.0 и представляет собой словарь, содержащий результат сравнения, который может быть интерпретирован Ansible.
  • $Ansible.Changedможет быть установлено в true или false, чтобы отразить, внес ли модуль изменения или нет. По умолчанию это установлено в true.
  • $Ansible.Failedможно установить значение true, если скрипт хочет вернуть ошибку обратно контроллеру.
  • $Ansible.Tmpdir— это путь к временному каталогу, который будет использоваться в качестве резервного хранилища и будет очищен после завершения работы модуля.
  • $Ansible.Verbosityпоказывает уровень детализации Ansible для этой пьесы. Позволяет скрипту устанавливать VerbosePreference/DebugPreference на основе детализации. Добавлено в 1.9.0.

решение2

Вкратце, в качестве примера псевдокода, основанного на вашем сценарии rc-вариации, где мы могли бы представить, что вы выходите с , 0когда ничего не изменилось, с , 4когда что-то изменилось, и с любым другим кодом, когда что-то пошло не так...

- name: some shell task
  ansible.windows.win_command: my_command
  register: my_command
  failed_when: my_command.rc | int not in [0,4]
  changed_when: my_command.rc | int == 4

Для получения более подробной информации см.Обработка ошибок в плейбуках

Обратите внимание, что для команд, которые носят исключительно информационный характер и ничего не меняют, changed_when: falseэто вполне приемлемо.

Связанный контент