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
я не вижу смысла в первом шаге
Timur
George
https://t.me/pro_ansible/98981 - в этом
Timur
Timur
Подключаем разные хендлеры в зависимости от сервис-менеджера
George
ну, может быть действительно оно имеет смысл
Timur
Vladislav 👻
Timur
да
Предложенный мной вариант чем-то не подходит?
Vladislav 👻
я уже вот так сделал
George
Vladislav 👻
Vladislav 👻
George
centos 6? centos 7?
Timur
Лишнее дублирование тасков
Timur
Можно одним таском обойтись
Vladislav 👻
как?
Timur
И одной переменной со списком хендлеров
Vladislav 👻
George
одной таской не обойдешься
George
все равно будет месиво
George
вопрос в том, насколько удобно это потом будет поддерживать
Timur
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…
Vladislav 👻
George
ага
Vladislav 👻
такое себе...
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 я уже нарвался один раз - затрахался потом выгребать
Timur
George
слишком генерик код
Timur
George
это примерно как я парням соптимизровал код на пихтоне напихав лямбд
Vladislav 👻
не нравится with
Vladislav 👻
слишком генерик, да
George
если генерик Тимуру непонятно, то поясню, что по-русски это можно написать как "слишком общий код"
Vladislav 👻
один из критериев для ansible я поставил себе простота и читаемость кода, а не "завернуть ли мне десяток ролей в роль для добавления пользователя в группу"
George
да, код должет быть поддерживаемым
George
а в примере Тимура - нужно смотреть минимум в двух местах, зато - да, он расширяемый и на другие менеджеры - системы-инициализации
George
спаисбо
Vladislav 👻
когда инфра растет, очень тяжело становится поддерживать другим, кто не писал роль
Timur
да, код должет быть поддерживаемым
Такой код как раз проще поддерживать. Нужно добавить поддержку другого сервис-менеджера - просто добавляешь нужный файл с переменными, не трогая тасков
Vladislav 👻
особенно, если они слабо знают ansible
George
есть баланс между копипастом и сделать слишком генерик код и засунуть все в переменные (или лямбды)
Sergey
...иначе набор ифов будет провоцировать слабознающих людей писать башсибл.
George
скажем так, я тоже люблю все сворачивать в минимальное количество kloc
George
но прекрасно понимаю обратную сторону этой оптимизации
Sergey
^^^ +100500
George
вообще-то да. Когда приходится выбирать что-то типа variable: {{ blablabla | omit }}
George
скажем так, я не буду впадать в фанатизм по любому из вариантов )
Vladislav 👻
Vladislav 👻
и хендлер как раз такой как вариант заходит, ты просто в нужном файле указываешь, какой хендлер дергать
George
Vladislav 👻
в моей же ситуации, выделять старый init.d в рамках одной таски-темплейта - избыточность
Vladislav 👻
будет третье условие, запилю таски на группы
George
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
Anonymous
George
George
фишка в том, что может где-то по дороге твой узернейм превращается в узернейм@domain.mame.tld
George
а дальше - по накатанной в лдап и отказ
George
(ну, и ты всегда можешь скрафтить этот файл для логина руками - там примитивный base64))))