Pavel
передаю модулю archive список каталогов
некоторых каталогов иногда нет во время работы модуля
есть ли красивый способ игнорировать отсутствие файлов?
Sergey
Господа, а кто, что имеет сказать за handlers vs register?
Когда handler-ы оправданы, а когда register?
Общие соображения такие (дальше - полотенце, сори):
- handler-ы шарятся между ролями, значит, что в случае конфликта имен, сделав nofity в одной роли, можно случайно дернуть handler другой роли, который делает не то, что мы ожидали
- по-умолчанию, в случае нескольких сработавших handler-ов, если какой-то один падает, то все остальные не срабатывают
- по-умолчанию, без force_handlers, если в одном таске вызвался notify на срабатывание handler-а, а следующий task свалился, то handler не сработает и это может привести к неконсистентному состоянию - при следующем проигрывании изменений не будет -и handler-ы уже не сработают
- порядок вызова handler-ов гарантировать нельзя - по сути порядок определяется их порядком следования в файле, где они объявлены, а не порядком вызовов notify
- если в play-е, при подключении ролей, одни роли опираются на другие роли и подключаются в определенном порядке, то роли, которые играются позже могут сфейлиться, т.к. таски от notify еще не сработали (они срабатывают в конце play-я) и получается,
нужно знать какие handler-ы и в каких ролях живут (инкапсуляция страдает), чтоб разнести такие роли по разным play-ям.
- meta: flush_handlers позволяет дернуть все handler-ы, но тогда вопрос, почему одна роль влияет на то, как работают другие роли? пользовалю, который проигрывает плейбук хочется детерминированного поведения и когда он видит, что вроде бы играется одна роль, а потом из-за flush_handlers начинают работать таски других ролей, которых в текущей проигрываемой роли никак быть не могло, то это введет в заблуждение.
- в ansible можно играть плейбук пошагово начиная с какого-то таска - с тасками последовательность шагов будет такой, как объявлено в плейбуке и ролях, а в случае handler-ов - не понятно, какой будет порядок выполнения
- на handler-ы не распространяется serial
—-
итого - кажется, что register + отдельный таск постабильнее и понадежнее будут
Asten
Господа, а кто, что имеет сказать за handlers vs register?
Когда handler-ы оправданы, а когда register?
Общие соображения такие (дальше - полотенце, сори):
- handler-ы шарятся между ролями, значит, что в случае конфликта имен, сделав nofity в одной роли, можно случайно дернуть handler другой роли, который делает не то, что мы ожидали
- по-умолчанию, в случае нескольких сработавших handler-ов, если какой-то один падает, то все остальные не срабатывают
- по-умолчанию, без force_handlers, если в одном таске вызвался notify на срабатывание handler-а, а следующий task свалился, то handler не сработает и это может привести к неконсистентному состоянию - при следующем проигрывании изменений не будет -и handler-ы уже не сработают
- порядок вызова handler-ов гарантировать нельзя - по сути порядок определяется их порядком следования в файле, где они объявлены, а не порядком вызовов notify
- если в play-е, при подключении ролей, одни роли опираются на другие роли и подключаются в определенном порядке, то роли, которые играются позже могут сфейлиться, т.к. таски от notify еще не сработали (они срабатывают в конце play-я) и получается,
нужно знать какие handler-ы и в каких ролях живут (инкапсуляция страдает), чтоб разнести такие роли по разным play-ям.
- meta: flush_handlers позволяет дернуть все handler-ы, но тогда вопрос, почему одна роль влияет на то, как работают другие роли? пользовалю, который проигрывает плейбук хочется детерминированного поведения и когда он видит, что вроде бы играется одна роль, а потом из-за flush_handlers начинают работать таски других ролей, которых в текущей проигрываемой роли никак быть не могло, то это введет в заблуждение.
- в ansible можно играть плейбук пошагово начиная с какого-то таска - с тасками последовательность шагов будет такой, как объявлено в плейбуке и ролях, а в случае handler-ов - не понятно, какой будет порядок выполнения
- на handler-ы не распространяется serial
—-
итого - кажется, что register + отдельный таск постабильнее и понадежнее будут
Все становиться проще когда в 1 роль не впихивают все что только в голову пришло. Раздроби все по ролям, сделай их независимыми друг от друга
Asten
Пример: надо выкатить nginx, и бекенд к ниму в докере
Asten
У тебя будут роли:
- установка и настройка докере
- установка и настройка nginx
- конфиги докер композов для бекенда
- конфиги для апстримов nginx
Asten
Все роли не зависят друг от друга
Asten
Потом в корне делаешь буку и перечисляешь нужные тебе роли и играешь
Asten
Последнее конечно лучше примером кода показать но я с телефона (
Asten
Как правильно выстроить каталог для буков написано в доке ансибла. Гуглиться что-то типа ansible best practices inveronment
Asten
Или на вчерашнем докладе про ансибл было в презенташке
Sergey
вопрос про handler-ы, а не про декомпозицию задач. когда handler-ы хорошо, а когда - плохо
Andrey
Asten
Дак разные роли разные хендлеры они не пересекаются
Asten
Я использую в каждой роли свои хендлеры т.к. у меня роли не связаны друг с другом
Asten
Бывают ситуации когда флашить хендлеры нужно это факт
Asten
И если изменений в конфигах не будет то после падения и хендлеры не сработают
Asten
Но это нужно учитывать при написании и обкатывать роли
Andrey
Asten
Asten
Смотря для чего использовать registry. Если для того, чтобы проверить запущен ли сервис и на этом основываться что делать дальше, то так не стоит писать
Asten
Надо просто написать state: started
Asten
Asten
И это на мой взгляд круто
Asten
У меня в этом случае есть возможность 3 раза предотвратить беду на проде: 1) упасть на деве, 2) упасть на стейдже 3) ну и на проде)
Asten
Упасть таском а не nginxом
Sergey
если все идет по плану, то возможно, что делать, если до срабатывания handler-а были падения или если сработало несколько handler-ов и один из них упал?
Asten
Asten
Ты ведь не на прод сразу гонишь
Asten
Можешь и падать
Sergey
Ты ведь не на прод сразу гонишь
если что-то упало - это ж не значит, что оно не протестировано. может сеть моргнула, а может какая-то железка сдохла
Asten
Ну надо разобраться
Asten
Тут наши примеры они из вакуума...
Sergey
ну так это да. но ситуация ж не исключена. все, что я хочу - это, чтоб, если что-то упало не по причинам корявости кода, а из-за внешних факторов, то повторный запуск плейбука бы доиграл до консистентного состояния
Asten
А от retry не пробовал запустится?
Asten
Там файлик такой специальный создаётся при падении
Asten
Сорри афкну (в дороге)
Sergey
А от retry не пробовал запустится?
не, позырю, что за файлик, был не в курсе, спасибо.
тут вот еще народ файлики сам руками создает и ту ж проблему приблизительно описывает - https://medium.com/@george.shuklin/handling-handlers-for-ansible-88b0c91515a4
Sergey
велосипед?
Asten
велосипед?
Ну понятно как я и писал странное дело чекать запущен ли сервис
Asten
Есть реальный кейс? Уверен можно роли написать по лругому
Asten
Не думаю что хороший путь писать роль в которой нужно любой ценой что-то запустить
Sergey
вот несколько типичных кейзов
- поставить на машины новый микрокод - надо ребутать машину
- изменить на работающей машине лимиты при работающих сервисах
- обновили конфиги или версию nginx
- прописать что-то и обновить postgres-ный pg_hba
- ...
Asten
И это обязательно в 1 подход разве?
Asten
Про ребут машине не ясно зачем, ядро сменить?
Sergey
И это обязательно в 1 подход разве?
так а плейбук не для этого разве?
чтоб держать окружение в консистентном и воспроизводимом состоянии, а иначе голову сломать можно, чтоб помнить, что, в каком порядке и где запускать, а потом еще и помнить, что было накатано, а что нет.
Asten
Asten
Можно ведь тегами обмазать все
Asten
Вапускатть только то что нужно
Asten
Ну и дробить на группы хостов для каких делать
Asten
и у тебя точно не всё что нужно делать такое опасное и требует флашить хендлеры
Asten
во смотри к примеру на таком примере:
Asten
- name: Actualize charm
hosts: apiv3
become: yes
roles:
- charm
tags:
- charm
- apiv3
- name: Actualize squark
hosts: apiv3
become: yes
roles:
- squark
tags:
- squark
- apiv3
- name: Actualize wboson
hosts: apiv3
become: yes
roles:
- wboson
tags:
- wboson
- apiv3
Asten
так можно катануть каждую роль отдельно с тагом соответствующим, а можно все вместе через -t apiv3
Asten
Sergey
Asten
чтобы нагляднее было смотри на верх. упало в роли charm к примеру
alx
всем привет, вопрос про пемеренные
хочу раскатывать параллельно php дефолтные настройки я хочу объявляю их
```
php_ini:
- version: 5
some_variable: some_value
- version: 7
some_variable: another_value
Как можно переопределять через host vars или group var только для определенно версии
Asten
Asten
только роли я гоняю по тегам
Asten
и знаю чего от них ожидать
Sergey
при том что группа хостов - одна и та же.
Asten
bebebe
такое впечатление что ansible митапов стало столько
что пора делать митапы типа
где ansible нужен, а где противпооказан
Sergey
кеширование - дело хорошее, но если вернуться к хендлерам, то по роли на плей вроде как ничего не решает все равно.
взять роль charm из примера выше - если в середине роли что-то пошло не так по внешним причинам, а потом мы переиграли по тегам плей, то это все равно не гарантирует того, что хендлеры при повторном проигрывании сработают
Sergey
короч - проще списать на особенность/bug/фичу ansible-а и смириться. ну или велосипедить.
Asten
либо нужно брать конкретный кейс и его разбирать. я не знаю в чем причина того что оно у тебя падает и почему болит. у меня такое бывает при написании, но я переписываю так чтоб не болело… фиг знает как объяснить
GithubReleases
ansible/ansible was tagged: v2.5.10
Link: https://github.com/ansible/ansible/releases/tag/v2.5.10
Release notes:
New release v2.5.10
GithubReleases
ansible/ansible was tagged: v2.7.0rc4
Link: https://github.com/ansible/ansible/releases/tag/v2.7.0rc4
Release notes:
New release v2.7.0rc4
Setox
Они сразу 3 ветки разрабатывают? 2.5 2.6 и 2.7?
Alexander
Кор фиксы / стабилизация / новые фичи для 2.5,6,7 соответственно. Всё вроде норм