Pit
Надо было мне в разведку идти, а не эти ваши линуксы ковырять. Уже бы поднялся
Max
Max
есть ириски?
Timur
господа, а можно перед стартом применения ролей проводить (или определять) какие-то pre-flight чеки, чтобы например не было конфликтов итд?
Timur
хотя бы начать с необходимых переменных для ролей
Timur
понятно, что я могу в роли сделать fail: when и оно спотыкнётся
Lamobot
Timur
так и делаю
Timur
Timur
а оно будет проверяться в момент импорта роли?
Lamobot
https://docs.ansible.com/ansible/latest/modules/assert_module.html
Lamobot
Сделайте его первым таском в роли
Timur
а мне надо, чтобы фейлилось перед плеем
Timur
Как вариант делать assert первым таском в плее
т.е. assert, а потом import_role? Ну, наверное, можно и так... Но вообще, конечно, хотелось бы где-то в роли определять список необходимых ей параметров, а потом ansible собирал эти параметры и проверял, определены ли они :)
Timur
т.е. assert, а потом import_role? Ну, наверное, можно и так... Но вообще, конечно, хотелось бы где-то в роли определять список необходимых ей параметров, а потом ansible собирал эти параметры и проверял, определены ли они :)
потому как этот ассёрт необходимо будет а) синхронизировать для каждого плейбука, который деплоит какие-то роли куда-то и б) при обновлении роли в гите переменные могут поменяться (хотя ладно, этого у меня нет, роли у меня импортятся по тегам)
Lamobot
Max
Max
(интуитивно, мне кажется тебе нужно создать роль preflight, которая будет зависимостью или вызываться explicitly из плея)
Max
но я не знаю всей глубины (_)(_)
Max
(проблемы)
Timur
дай пример префлайтов, которые ты хочешь ловить
ну вот хотя бы список отсутствующих переменных. Т.е. зависимости, которые подтянутся нужной ролью без установки этой роли не особо-то и нужны. Понятное дело, что идемпотентность всё спишет и повторно роли отработают нормально, но хорошо было бы как-то изящно это решить - чтобы ansible тебе говорил "чувак, ты тут слейв постгреса поднять пытаешься, а между тем нет ни данных, откуда брать basebackup, ни данных, к какому сервису цепляться". Сейчас оно так говорит (fail: when вполне работает), но уже после того, как применит пачку ролей - мониторинг, сборщик логов, первоначальная настройка системы итд.
Timur
жопы на самом деле никакой нет - всё работает :)
просто хочется красоты
Max
я поставил 2 пустых стакана
Timur
:)
Max
ну вот хотя бы список отсутствующих переменных. Т.е. зависимости, которые подтянутся нужной ролью без установки этой роли не особо-то и нужны. Понятное дело, что идемпотентность всё спишет и повторно роли отработают нормально, но хорошо было бы как-то изящно это решить - чтобы ansible тебе говорил "чувак, ты тут слейв постгреса поднять пытаешься, а между тем нет ни данных, откуда брать basebackup, ни данных, к какому сервису цепляться". Сейчас оно так говорит (fail: when вполне работает), но уже после того, как применит пачку ролей - мониторинг, сборщик логов, первоначальная настройка системы итд.
мне кажется это попытка охватить необъятное.
Max
входные валидации роли должна валидировать сама роль.
Timur
я так это вижу с архитектурной т.з.
Max
то, что имеет смысл валидировать отдельно, это состав инвентаря, сетевой доступ, базовый функционал типа ssh/python/winrm
inqfen
Max
inqfen
Вообще, так как это не декларативный формат - такое тестирование будет сложно
inqfen
В meta валидация в смысле
inqfen
А оно много где описано
inqfen
Поэтому это уже тестирование плейбука
inqfen
Чот сообщение не отправилось
Timur
Ну я многого не требую - ассерт в формате жинжа2 выражения при импорте роли :)
inqfen
Timur
Эхма. Понятно, что пока нет. Но было бы красиво, кмк
inqfen
только учти, что может наример или тот или тот набор переменных быть
inqfen
А зависимости от других параметров - могут например различаться ключи словаря, который ты будешь проверять
inqfen
И вот это все там учти
Timur
Блин, 250 открытых фичреквестов по ключевому слову "role" :)
Sergey
Georgy Kharitonov
всем привет.
есть такая задачка, надо через ансибл крон настроить на нескольких хостах.
но так чтобы на всех хостах время начала выполнения задания по планировщику отличалось на 5 минут.
то есть на первом хосте должно быть 0 1 * * *, на втором 5 1 * * *, 10 1 * * * и тд.
что-то не могу придумать как это в ансибл реализовать.
inqfen
Темплейт
inqfen
Или переменные с datetime
inqfen
А, хотя туплю с datetime
Lamobot
inqfen
А это одна хостгруппа?
inqfen
Если да, то можно установить для каждого хоста в хостгруппе через цикл специальную hostvar где будет это число в минутах. А каждую итерацию будет делаться +5
inqfen
А запись в крон в качестве первого числа будет эту hostvar юзать
inqfen
И надо обработать, что это число не может быть больше 60 например и вместо 65 должно быть 0
Georgy Kharitonov
да, hostvar наверное правильное решение.
спасибо
Lamobot
Но я бы на вашем месте пошёл через номера хостов в группе, как указал @inqfen только без циклов, всё можно сделать проще
{{ groups[hosts_group_name].index(ansible_host) }} - выдает номер хоста в группе
Rad
приветствую , подскажите пожалуйста в awx роли подтягивать только через roles/requirements.yml ? Напрягает необходимость для каждого плейбука указывать роли через requirements.yml, хотел указывать в плейбуке в виде
roles:
-- {role: rolename, tags: [ 'tagname'] }
Georgy Kharitonov
Max
просто крон штука невидимая.
Max
(извне)
Georgy Kharitonov
inqfen
Max
вм
а откуда запускается ансибл? руками или автоматически через какой-то оркестратор?
Georgy Kharitonov
⎈
Если не докер, то можно вместо крона использовать встроенные инструменты systemd
Max
если у вас есть узкое место (как напр. общая бд),
то используйте механизм, позволяющий запускать DAGи и т.п.
таких есть много.
кроме этого, запуск крона еще и не видно вне вмки.
у вас получается есть какой-то процесс, который надо запустить максимум в одной-двух ипостасях параллельно.
наверняка было бы приятно знать что все или не все запустились, и завершились успешно.
и кроны иногда могут запускаться из-за проблем синхронизации времени "не вовремя".
Max
в инфре есть какой-то сервер выкатки? и т.п.
Georgy Kharitonov
Georgy Kharitonov
вряд ли выделят ресурсы под такую софтину.
можно попробовать конечно...
Max
Georgy Kharitonov
ну, я максимум могу им посоветовать такое поставить.
Georgy Kharitonov
пасиба, в общем.
не видел еще, чтобы у нас что-то подобное кто-то у себя использовал.