быть известная ошибка, которую в принципе реально обработать и применить другое флоу. Стоит ли на ансибл делать подобное ветвление и писать свой обработчик ошибок? Или лучше написать скрипт на питоне в таком случае?
Для обработки ошибок в таске есть failed_when например
Да я не про это. Я про "программирование" на ансибл)
Что именно имеется в виду?
Вот это - 1. флоу - ошибка - YES -> 2. флоу / NO -> 3. флоу.
самое правильное предыдущими тасками - приводить в порядок все, чтобы ошибка не могла произойти. например, обновить репы, ключи или что то такое
Это понятно. Тут нестандартный кейс, таской запускается приклад на java, который может упасть с определенной ошибкой. В этом случае надо применить другой набор таск.
ну регистрировать вывод, ignore erros true, и обрабатывать. это все равно лучше, чем на питоне писать, почему нет то
В best practice считается дурным тоном "программирование" на ансибл, а тут как раз тот случай.
не вижу программирования в использовании when )
Вообще-то уже условный оператор напрашивается 😏
вот насчет другого флоу - а нельзя ли этот флоу провести до запуска java приложения? чттобы оно запустилось?
Я вот так и сделал, но вендор против)
пиздить такого вендора)))
Я пытаюсь, но ска сопротивляется))
короч я не буду говорить правильно или нет, но у нас много чего написано на ansible, и кондишены активно юзаем, и разветление. как в конце концов писать роли под разные os то?
Логика понятна. Попробую реализовать попроще.
Только не ignore_errors, а failed_when лучше
с чего бы эт?) плейбук должен продолжиться, если вылетела ошибка. конечно можно failed_when: false, но это по извратски выглядит мне кажется)
Не false, а с конкретными условиями по кодам возврата как раз. Отлично подходит для хендлинга всяких third-party приложений, вызываемых из ансибла, и возвращающих стандартно ненулевые коды возврата.
ну смотри, ну отдал код 100 ошибку. в этом случае тебе надо вызвать таски из 100.yml. или выдаал 200 ошибку, в этом случае тебе надо 200.yml вызвать. как failed when поможет?
В этом - никак. Это делается в другом таске на основе register. failed_when поможет более корректно сформулировать условие ошибки - что является фейлом, а что - не.
вообще такой сценарий - говнина) поэтому работаем с тем, что есть))
В идеале под такой кейс отдельный модуль пишется, а то и коллекция. Но это уже более трудозатратная вещь обычно
Есть модуль block https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_blocks.html прямо для этого случая. Стоит ли его использовать в конкретном случае, интересный вопрос.
Я так сейчас и сделал. Посмотрим, можно ли с этим жить.
Обсуждают сегодня