Timur
systemv.yml --- es_service_handlers: - Restart elasticsearch
Timur
Так понятно, или еще подробнее расписать?
Timur
В таске будет так: - name: "Copy service configuration file" template: src: '{{ es_service_script }}.j2' dest: '{{ es_service_path }}/{{ es_service_script }}' mode: '{{ es_service_script_mode }}' force: true notify: '{{ es_service_handlers }}'
George
я не вижу смысла в первом шаге
George
https://t.me/pro_ansible/98981 - в этом
Timur
https://t.me/pro_ansible/98981 - в этом
И что в этом непонятного?
Timur
Подключаем разные хендлеры в зависимости от сервис-менеджера
George
ну, может быть действительно оно имеет смысл
Timur
да
Предложенный мной вариант чем-то не подходит?
Vladislav 👻
я уже вот так сделал
Vladislav 👻
Vladislav 👻
George
centos 6? centos 7?
Timur
Лишнее дублирование тасков
Timur
Можно одним таском обойтись
Vladislav 👻
как?
Timur
И одной переменной со списком хендлеров
Vladislav 👻
George
одной таской не обойдешься
George
все равно будет месиво
George
вопрос в том, насколько удобно это потом будет поддерживать
Sergey
одной таской не обойдешься
Обойдёшься. Сунь ей структуру на вход - пусть копается 😊))
George
давайте еще подеремся
Timur
как?
- name: "Copy service configuration file" template: src: '{{ es_service_script }}.j2' dest: '{{ es_service_path }}/{{ es_service_script }}' mode: '{{ es_service_script_mode }}' force: True notify: '{{ es_service_handlers }}'
George
слишком сильная шаблонизация - тоже проблема
Артём
Нужно выполнить всего три команды, чтобы поставить Gentoo…
George
ага
Vladislav 👻
такое себе...
George
и определять в инвентори?
нет, Тимур предложил другое
Timur
и определять в инвентори?
Зачем в инвентори? include_vars по условию
Timur
См. выше
George
перенести переменные части (типа режима доступа файла и пр.) - в файлы переменных
George
а селектить по факту
Timur
- name: Load a variable file based on the service manager include_vars: '{{ service_manager }}' with_first_found: - '{{ ansible_service_mgr }}.yml' - systemv.yml loop_control: loop_var: service_manager
George
https://t.me/pro_ansible/98981
Артём
Но это надо руками фасовать хосты на 6 и 7. И не забывать перезаправить при обновлении. А из факта прочитать сработает всегда.
Vladislav 👻
что-то мне не нравится в этом методе, на подобные оптимизации в ansible я уже нарвался один раз - затрахался потом выгребать
George
слишком генерик код
Timur
слишком генерик код
Что, простите?
George
это примерно как я парням соптимизровал код на пихтоне напихав лямбд
Vladislav 👻
не нравится with
Vladislav 👻
слишком генерик, да
George
если генерик Тимуру непонятно, то поясню, что по-русски это можно написать как "слишком общий код"
Vladislav 👻
один из критериев для ansible я поставил себе простота и читаемость кода, а не "завернуть ли мне десяток ролей в роль для добавления пользователя в группу"
Timur
не нравится with
Ну, можно через lookup сделать
George
да, код должет быть поддерживаемым
George
а в примере Тимура - нужно смотреть минимум в двух местах, зато - да, он расширяемый и на другие менеджеры - системы-инициализации
George
спаисбо
Vladislav 👻
когда инфра растет, очень тяжело становится поддерживать другим, кто не писал роль
Timur
да, код должет быть поддерживаемым
Такой код как раз проще поддерживать. Нужно добавить поддержку другого сервис-менеджера - просто добавляешь нужный файл с переменными, не трогая тасков
Vladislav 👻
особенно, если они слабо знают ansible
George
есть баланс между копипастом и сделать слишком генерик код и засунуть все в переменные (или лямбды)
Sergey
когда инфра растет, очень тяжело становится поддерживать другим, кто не писал роль
.....поэтому стоит держать один таск там, где можно обойтись одним, и не плодить (n*число_ОС) <——- ИМХО, не претендую на абсолютную истину
Sergey
...иначе набор ифов будет провоцировать слабознающих людей писать башсибл.
George
скажем так, я тоже люблю все сворачивать в минимальное количество kloc
George
но прекрасно понимаю обратную сторону этой оптимизации
Timur
когда инфра растет, очень тяжело становится поддерживать другим, кто не писал роль
По-твоему, если обвешаться when-ами и наплодить кучу дублирующих тасков с хардкодом параметров - это проще поддерживать?
Sergey
^^^ +100500
George
вообще-то да. Когда приходится выбирать что-то типа variable: {{ blablabla | omit }}
George
скажем так, я не буду впадать в фанатизм по любому из вариантов )
Vladislav 👻
По-твоему, если обвешаться when-ами и наплодить кучу дублирующих тасков с хардкодом параметров - это проще поддерживать?
если уж по существу рассуждать, в данной ситуации обычно делают файл таску для нужной ос-версии
Vladislav 👻
и хендлер как раз такой как вариант заходит, ты просто в нужном файле указываешь, какой хендлер дергать
George
Vladislav 👻
в моей же ситуации, выделять старый init.d в рамках одной таски-темплейта - избыточность
Vladislav 👻
будет третье условие, запилю таски на группы
Vladislav 👻
а хендлер универсальный, просто указывай, где какие дернуть
Anonymous
Слушайте, какая-то странная проблема с модулем docker_login на свой registry в artifactory с включенным LDAP. Не уверен, что дело в ansible, но без него все работает. Если сделать руками docker login -u username artifactory.example.com:5000 и ввести пароль, то авторизуется нормально. А если пытаться сделать то-же самое через модуль docker_login, то получаю ошибку unauthorized: BAD_CREDENTIAL В логах artifactory видно, что он пытается прочитать этого пользователя из LDAP (но этот юзер создан в локальной пользовательской базе) ---- Т.е. в результате имеем: если руками docker login - то все ок, есть через ansible - то попытка найти пользователя в LDAP и error
George
фишка в том, что может где-то по дороге твой узернейм превращается в узернейм@domain.mame.tld
George
а дальше - по накатанной в лдап и отказ
George
(ну, и ты всегда можешь скрафтить этот файл для логина руками - там примитивный base64))))