Рейтинг:0

Сделать так, чтобы пропущенная задача отображалась как «ОК»

флаг ru
jdm

У меня есть несколько задач, которые выполняются в двух частях. Первая часть задает условие, а вторая часть использует когда условно выполнить. Псевдопример:

- имя: проверьте, установлено ли
  команда: (...)
  регистрация: is_installed

- имя: запустить скрипт установки
  когда: is_installed.stdout == "да"
  команда: (...)

Вторая задача отображается как «пропущенная». Это не совсем правильно, я не отказался от установки, но подтвердил, что она уже сделана, поэтому она должна отображаться как «ОК». Он должен показывать «пропущено», только если данный хост не нуждается в этом шаге. Я знаю, что это просто косметика, но я все же хотел бы знать, есть ли способ заставить его сказать «ОК».

Я попытался установить изменено_когда к ЛОЖЬ. Хотя это устанавливает результат в OK, он все еще выполняет команду. Кто-то попросил хорошо когда параметр, но он был отклонен, и я не уверен, что разработчики поняли запрос.

U880D avatar
флаг ca
Из вашего описания я понимаю, что вам нравится устанавливать или настраивать «что-то» на удаленных узлах. Вам нравится подтверждать при следующем запуске задачи, что это все еще так. Для меня это звучит как идемпотентная установка пакета, и для достижения этой цели не требуется «пропущенная» проверка «ok_when».
флаг ru
jdm
Правильно, но установка не через apt, pip и т.д., поэтому я не могу использовать специализированную задачу. В общем случае у меня есть две команды оболочки, одна сообщает мне, необходимо ли действие, а другая выполняет действие.Кажется, это будет одна из самых основных вещей, которые вы можете сделать в ansible.
U880D avatar
флаг ca
Поскольку не предоставлено никакой информации о том, что это может быть за «что-то», я могу только догадываться о некоторых случаях. Поскольку Ansible — это инструмент управления конфигурацией, с помощью которого объявляется состояние, задачи обычно организуются так, чтобы убедиться, что что-то находится в определенном состоянии. Имея это в виду, установщик (сценарий) может запускаться дважды и быть идемпотентным. Почти во всех случаях предварительная проверка не требуется.
U880D avatar
флаг ca
Также может быть возможно иметь проверку только в вашей команде оболочки, например, для `needs-restarting -r || /usr/sbin/shutdown -r +1`, пусть команда запускается, если это необходимо, и обеспечивает обратную связь для среды Ansible с помощью кодов возврата, stderr, stdout.
Рейтинг:2
флаг ng

Я не мог придумать здесь общего решения. Но если задачи действительно что-то устанавливают, вы можете удалить первую часть и добавить создает ко второй части, чтобы осуществить проверку.

- имя: запустить скрипт установки
  создает: /путь/к/установке
  команда: (...)
флаг ru
jdm
Да, это, кажется, идеоматическое решение. Альтернативой было бы написать собственный модуль, который сам знает, как проверять «ОК». Странно, что нет простого способа определить это в YAML.
U880D avatar
флаг ca
Верно, это то, что [`параметр командного` модуля `создает`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html#parameter-creates) или [`модуль оболочки` параметр `creates`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/shell_module.html#parameter-creates) предназначен для.См. также пример [ansible/modules/command.py](https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/command.py), «_хотя сама команда является произвольной и не может быть предметом семантики режима проверки, он добавляет параметры C (создает) / C (удаляет) в качестве обходного пути_».
Рейтинг:1
флаг cn

когда: оценка как false приводит к пропущенному статусу этой задачи. Печать чего-либо при пропуске происходит из стандартного плагина обратного вызова. Для обратных вызовов по умолчанию это можно отключить глобально с помощью display_skiped_hosts элемент конфигурации. См. документы: ansible-doc -t обратный вызов по умолчанию

Элегантным решением может быть обернуть эту вещь в настоящий менеджер пакетов и установить его. Для Ansible существует несколько идемпотентных модулей менеджера пакетов.

Или сценарий установки можно сделать безопасным для повторного запуска, и он возвращается с нулевым кодом в случае успеха.


Хотя я не говорю за разработчиков, они осторожно относятся к добавлению функций в ядро. И, возможно, они не видят проблемы с задачей, о которой сообщают, что она пропущена, не каждая задача каждой игры выполняется.

когда: контролирует выполнение задачи. изменено_когда: и не удалось_когда: изменить статус задачи после ее запуска, например, на основе кода возврата или стандартного вывода. Вместе они дают контроль над тем, находится ли задача в статусе измененной или неудачной, даже для универсальных командных задач.

Для большего контроля над идемпотентностью используйте менее универсальный модуль. И если вас все еще оскорбляет то, что напечатано, рассмотрите собственный плагин обратного вызова.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.