
Vladimir
18.07.2018
05:39:02
я про значения переменных через varname=1
Рекомендуют делать всё ямллайк

ShadoWalkeR
18.07.2018
05:40:28
Нужен. Сейчас мне приходится пилить такую конструкцию зачастую:
- name: Generate {{ daemon }}
template: ..
- name: Reload systemd
systemd: ..
Помоему это проще:
- name: Generate {{ daemon }}
template: ..
handler: restart_systemd {{ daemon}}

Vladimir
18.07.2018
05:41:29
Ну так раскатка миллиона юнитов не частое дело.

Google

Vladimir
18.07.2018
05:41:54
Юнит как и юзер и директории в пакете должен быть

ShadoWalkeR
18.07.2018
05:42:19
Огромнейшее "спасибо" за то что на блок нельзя повесить loop - 2-3 шага выкидывать в отдельную таску изза позиции разрабов "Мы считаем что этого делать не нужно" просто идиотизм

Gleb
18.07.2018
05:42:45

Vladimir
18.07.2018
05:43:26
у тебя код поменялся продукта собирай рпмку.

ShadoWalkeR
18.07.2018
05:44:14
Я при раскатывании сервера не генерирую только 1 вещь - скопировать скрипты из гита. Все остальное - запихать в systemd, добавить на мониторинг, запустить/перезапустить у меня сделано шаблонами, генерацией и тд
И слышать что ансибл не для этого очень странно - а для чего он тогда нужен?

Vladimir
18.07.2018
05:47:35
Ансибл для этого но и использовать его нужно так как он задумывался

ShadoWalkeR
18.07.2018
05:48:06
Никаких шаблонов - херачим портянки аналогичные башу?

Vladimir
18.07.2018
05:49:05
ну так класть миллион юнитов в одной роли это странный путь.
педалить киллометровые лупы тоже так себе затея. Это как регекспы на пол экрана

ShadoWalkeR
18.07.2018
05:51:08
А у меня микросервис - не слышали о таком? Когда программа состоит из нескольних независимых модулей. И с точки зрения интеграции в systemd они отличаются только именем запускаемого скрипта

Vladimir
18.07.2018
05:51:22
Ты для проверки нехернюлиясделал давай другим свои роли почитать. Если человек с ходу не понял как оно работает значит чтото не так

Google

Vladimir
18.07.2018
05:51:49
Ну так не крути микросервисы на одной ноде
Это как бы не путь микросервисов
и если всё таки очень надо собирай рпмки или дебки а ансиблом их ставь.

ShadoWalkeR
18.07.2018
05:54:26
Путь путь. Просто они являются разными интерфейсами - каждый для своей задачи. Вторая половина накатывается на другие сервера.

Vladimir
18.07.2018
05:56:18
Тогда пакеты. у всех сейчас есть плагины для сборки. Собираются если спеки не кривые быстро
Получаем версионирование из коробки и быстрый откат

Nklya
18.07.2018
05:57:07
Или докер

Vladimir
18.07.2018
05:57:43
Ну докер это отдельная инфраструктура к которой надо прийти

ShadoWalkeR
18.07.2018
06:00:00

Vladimir
18.07.2018
06:00:49
вот только нативные средства системы ничего про твой гит не знают.
а на чём у тебя микросервисы?

ShadoWalkeR
18.07.2018
06:01:13
Руби

Gleb
18.07.2018
06:01:36

ShadoWalkeR
18.07.2018
06:01:56

Vladimir
18.07.2018
06:02:40
но как правило нужно ещё конфиги положить чтото в системе поднастроить. И тд

ShadoWalkeR
18.07.2018
06:04:08

Vladimir
18.07.2018
06:04:32
Нода упала нет твоих микросервисов
целой пачки

Google

ShadoWalkeR
18.07.2018
06:05:03
Горизонтальное масштабирование - не не слышали?

Vladimir
18.07.2018
06:05:59
деградация сервиса - не не
слышали?

ShadoWalkeR
18.07.2018
06:06:11
Резервирование там. Распределенные системы?

Vladimir
18.07.2018
06:07:17
если у тебя при выходе из строя одной ноды пропадает больше одного сервиса это говорит о том что что-то нетак
И не важно работает прод при этом или нет.

ShadoWalkeR
18.07.2018
06:07:47
То что у меня упадет эта нода означает только то, что прекратят обрабатываться задачи которые на ней крутились. Просто возрастет нагрузка на другие ноды

Vladimir
18.07.2018
06:08:07
Для микросервисов специально кубернетис придумали
Который решает все выше тобой заданные вопросы.

ShadoWalkeR
18.07.2018
06:08:34
Вы даже не можете понять что у меня интерфейс от основной логики отделен за счет микросервисности
А пытаетесь рассказывать что я делаю все неправильно

Nklya
18.07.2018
06:09:04
В общем, это называется кубернетис на ансибле и костылях

ShadoWalkeR
18.07.2018
06:09:48
Еще один аналитик от бога

Gleb
18.07.2018
06:10:05

Vladimir
18.07.2018
06:11:26
Ну какбы линукс уже давно на юниксвей плевать хотел.

ShadoWalkeR
18.07.2018
06:11:42
Пойду лучше поработаю

Vladimir
18.07.2018
06:11:46
Тот же системд прям юниксвей,

Nklya
18.07.2018
06:11:55
Кстати, если у тебя все что нужно - сгенерировать шаблон и рестартануть, нафига тебе вообще хендлеры?
Делай просто рестарт по changed

Vladimir
18.07.2018
06:13:45
Об этом выше писали. Там типо кода больше.
И не красиво получается

Nklya
18.07.2018
06:14:46
Не, он там лепил какую-то дичь с динамической генерацией хендлеров

Google

Nklya
18.07.2018
06:15:37
Я такое делал для деплоя war'ников в томкат, нормально выглядит

Евгений
18.07.2018
07:02:21
https://stackoverflow.com/questions/25694249/ansible-using-with-items-with-notify-handler
Нужен. Сейчас мне приходится пилить такую конструкцию зачастую:
- name: Generate {{ daemon }}
template: ..
- name: Reload systemd
systemd: ..
Помоему это проще:
- name: Generate {{ daemon }}
template: ..
handler: restart_systemd {{ daemon}}
не то?
А у меня задача прочитать переменные из файла - не важно на локальном компе или на удаленном и использовать эти переменные, чтобы затем на удаленной машине пополнять конфиги в соотв. строках
не подскажите, как реализовать?
я так понял ансибл читает из yaml или json
а нужно из простого файлика txt, который правит юзер
можно, конечно генерировать его в yaml или json или т.д. но может подскажите, что удобнее?
я не прошу кода, достаточно лишь ключевых слов, куда копать)

Admin
ERROR: S client not available

Ievgen
18.07.2018
07:14:30
Yaml хорошо читаем и достаточно прост, совсем не вариант научить юзера делать в тхт файлике что то типа:
variable: value
?

Евгений
18.07.2018
07:27:33
думаю, так и буду делать, нормальный вариант
а если будут задачи брать на удаленной машине - то конвертировать в json\yaml каким-нибудь скриптом...
нужно будет просить юзера заполнить var, а затем проверить еще эти значения, видимо внешним скриптом... ай, ладно
как-нибудь сделаю)

Vladimir
18.07.2018
07:41:27

Евгений
18.07.2018
07:45:56
как я понял, он все переменные отдаст как контент, а переменные разные и их около 10, а не 1

Alexander
18.07.2018
07:54:50

ShadoWalkeR
18.07.2018
07:57:19
А зачем жестко прописывать зависимости? Просто если чтото заставит рестартануть target (например кривые руки эксплуатации), от которого жестко зависят все сервисы, то они тоже рестартанут.
А друг от друга сервисы не зависят

Vladimir
18.07.2018
08:08:14
а почему ты массивом то не хочешь сделать список

ShadoWalkeR
18.07.2018
08:08:49
А почему вы уверенны что у меня не так?

Google

Vladimir
18.07.2018
08:09:09
- name: Generate {{ item }}
template: ..
with_items: ....
и не нужны никакие хендлеры.

ShadoWalkeR
18.07.2018
08:11:14
У меня для разных типов сервисов разные правила генерации - гдето достаточно только имени, гдето нужно описать дополнительные параметры - и список слов превращается в список списков.
Хэндлер хотел использовать чтобы уйти от block/include_tasks - вместо двух шагов выполнять 1
Вообще самое позорное что могли разрабы ансибла придумать - директиву block. Loop на нее повесить нельзя (потому что это не нужно по словам разрабов), name, на который блок вешается, в лог не выводится. Поэтому его выполнение в логе выглядит не как:
block: Generate daemon {{name}} -> template -> systemd
А просто
template -> systemd
Хочешь пояснений? Вешай на каждое действие в блоке name
И в итоге вместо аккуратной группировки получается эталонная херня

Nklya
18.07.2018
08:18:52
каждый таск должен быть с name, вот и все
тебе даже ansible-lint об этом скажет

Vadim
18.07.2018
08:21:05

Евгений
18.07.2018
08:22:32

ShadoWalkeR
18.07.2018
08:24:35
каждый таск должен быть с name, вот и все
Зачем? Что если я хочу несколько таск сгруппировать логически? Просто пример:
- name: Generate monitoring target
template: src=etc/systemd/monitoringLLD.target.j2 dest=/etc/systemd/system/{{ SYSTEMD_ZABBIX_MAIN_KEY|default("monitoringLLD") }}.target
- name: Generate monitoring failure service
template: src=etc/systemd/onfailureLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_ONFAILURE|default("onfailureLLD") }}@.service
- name: Generate monitoring probe
template: src=etc/systemd/probeLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_PROBE|default("probeLLD") }}@.service

Nklya
18.07.2018
08:25:22
ну вот и группируй их в блок, если очень надо


ShadoWalkeR
18.07.2018
08:25:30
Казалось бы логично что я могу их объединить через block в одну таску:
- name: Generate monitoring infrastructure.
block:
- template: src=etc/systemd/monitoringLLD.target.j2 dest=/etc/systemd/system/{{ SYSTEMD_ZABBIX_MAIN_KEY|default("monitoringLLD") }}.target
- template: src=etc/systemd/onfailureLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_ONFAILURE|default("onfailureLLD") }}@.service
- template: src=etc/systemd/probeLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_PROBE|default("probeLLD") }}@.service
Но изза ебанутой реализации блока приходится делать так:
- name: Generate/Re-Generate monitoring infrastructure.
block:
- debug:
msg: Generate/Re-Generate monitoring infrastructure.
- template: src=etc/systemd/monitoringLLD.target.j2 dest=/etc/systemd/system/{{ SYSTEMD_ZABBIX_MAIN_KEY|default("monitoringLLD") }}.target
- template: src=etc/systemd/onfailureLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_ONFAILURE|default("onfailureLLD") }}@.service
- template: src=etc/systemd/probeLLD@.service.j2 dest=/etc/systemd/system/{{ SYSTEMD_PROBE|default("probeLLD") }}@.service


Vadim
18.07.2018
08:26:27
а чем with_items \ lookup не походит?

Nklya
18.07.2018
08:26:32
логично-не логично, код открытый, идешь и смотришь, можно ли творить такую дичь

ShadoWalkeR
18.07.2018
08:31:24
Не знаю для какой версии тот пример со stack overflow но в 2.6 хэндлер дергается 1 раз после отыгрывания всего плейбука. И если один и тот же хэндлер вызывается для разных переменных, то он выполнится только для самой последней.
Если бы у меня был просто один список сервисов это бы полностью устраивало, но этого нет.


Евгений
18.07.2018
08:42:08
Не знаю для какой версии тот пример со stack overflow но в 2.6 хэндлер дергается 1 раз после отыгрывания всего плейбука. И если один и тот же хэндлер вызывается для разных переменных, то он выполнится только для самой последней.
Если бы у меня был просто один список сервисов это бы полностью устраивало, но этого нет.
печально, спасибо что проверил, у меня руки еще не дошли, учусь пока что
да и вообще я сделал выводы, что ансибл скорее всего буду использовать связкой: питон поверх ансибла, там и проверить пользовательские переменные введенные можно и самому сгенерировать хендлеры и все таски похожие генерировать функциями. Роли мне не понравились...
если будут нерешаемые корявости - вообще буду чисто питон использовать с его родными модулями для тех же задач, что и ансибл
хотя, возможно, сказывается малый опыт использования этого инструмента у меня и непонимание многого, роли вообще не понял зачем нужны...
У меня конкретные задачи: 1 раскатать ПО из набора сервисов на хост, подменить переменные в конфиге на пользовательские. Хосты разные и не связаны с друг другом. Это виделось мне одним плейбуком.
2. Точно также, что выше- но связанные хосты с сервисами
(в первом случае однонодовая инсталяция, во втором- многонодовая)


Nklya
18.07.2018
08:42:55
ну так и делаешь блин одну роль и вызываешь ее для разных хостов потом с разными именами
нахера это лепить одной сраной простыней на ямле?


ShadoWalkeR
18.07.2018
08:43:48
печально, спасибо что проверил, у меня руки еще не дошли, учусь пока что
да и вообще я сделал выводы, что ансибл скорее всего буду использовать связкой: питон поверх ансибла, там и проверить пользовательские переменные введенные можно и самому сгенерировать хендлеры и все таски похожие генерировать функциями. Роли мне не понравились...
если будут нерешаемые корявости - вообще буду чисто питон использовать с его родными модулями для тех же задач, что и ансибл
хотя, возможно, сказывается малый опыт использования этого инструмента у меня и непонимание многого, роли вообще не понял зачем нужны...
У меня конкретные задачи: 1 раскатать ПО из набора сервисов на хост, подменить переменные в конфиге на пользовательские. Хосты разные и не связаны с друг другом. Это виделось мне одним плейбуком.
2. Точно также, что выше- но связанные хосты с сервисами
(в первом случае однонодовая инсталяция, во втором- многонодовая)
Лучше на логические блоки разбить и из них собирать таски, а в main оставить только какую таску вызвать