Anonymous
есть плейбук что ставит и конфигурирует постгрю на центос и на убунту
Anonymous
пути до конфигов и данных там разные
Anonymous
хотелось бы задавать их на основе дистра
Logan
есть плейбук что ставит и конфигурирует постгрю на центос и на убунту
я бы сделал так: - пути к конфигам прописываем в var_files - var_files подключаем через факт
Anonymous
не удобно
tutunak
Время деплоя вырастает
Вот тут вроде солюшн, но я не уверен https://stackoverflow.com/questions/18794808/how-do-i-get-logs-details-of-ansible-playbook-module-executions
Anonymous
проитмер таска
Anonymous
- name: copy postgresql.conf template: src: "postgresql.conf.j2" dest: "{{pg_data}}/postgresql.conf" owner: "postgres" group: "postgres" mode: 0600
Anonymous
вот pg_data задать на основе знания какой дистр было бы круто
Sergey
хотелось бы задавать их на основе дистра
https://docs.ansible.com/ansible/latest/plugins/lookup/first_found.html
Sergey
всё придумано до нас
Logan
pg_data зависит не от ОС вообще-то) его можно менять весьма свободно
Anonymous
не пришлось бы when везде пихать
Egor
ansible_distribution и include_vars
Egor
в инклуд варс кидаете как раз свои пути конфигов и и прочее, обрамив в переменные
Anonymous
pg_data зависит не от ОС вообще-то) его можно менять весьма свободно
это частный случай задачи - когда что-то зависит от дистра
Egor
а в начале делаете нечто вроде include_vars: file: '{{ ansible_distribution }}'.yml
David
- name: install mandatory packages apt: name: "{{ item.value.apt.package_name }}" with_dict: "{{ office.packages }}" Ребят подскажите плз, есть такой таск и вот такой файл vars. slack: apt: repo: deb https://packagecloud.io/slacktechnologies/slack/debian/ jessie main package_name: slack-desktop key: url: https://packagecloud.io/slacktechnologies/slack/gpgkey flameshot: apt: repo: '' package_name: flameshot key: url: '' Можно ли как то сделать чтобы если репо не указан то использовался стандартный убунты?
Egor
в отдельной таске
Egor
но ща придут админы, и опять скажут, что я предлагаю хуйню :-)
tutunak
Опять же в аутпуте все хосты будут
А ты на самом хосте после этого глянь в rsyslog, + можно глянуть на скрипт который ансибл формирует на стороне хоста, если там есть логгирование, то можно подхачить свой ансибл и логи будут на целевом хосте, Опять же в аутпуте все хосты будут https://github.com/ansible/ansible/blob/devel/lib/ansible/module_utils/basic.py#L1715-L1753
Anonymous
Я же сказал на 2.7
проглядел. стараюсь на последней стабильной жить...
tutunak
Опять же в аутпуте все хосты будут
Сурс https://stackoverflow.com/questions/40913619/how-do-i-read-understand-ansible-logs-on-target-host-written-by-syslog
Anonymous
а в начале делаете нечто вроде include_vars: file: '{{ ansible_distribution }}'.yml
это костыль - но смотрю много где популярен
Anonymous
ну имхо конечно
Egor
чо сразу костыль то? :-)
Egor
@tgadiev
Aleksey
а в начале делаете нечто вроде include_vars: file: '{{ ansible_distribution }}'.yml
тоже так делаю, а в папке vars роли соответственно два файлика - RedHat.yml и Debian.yml
tutunak
Опять же в аутпуте все хосты будут
Ну как вариант поднятый на стороне заказчика rsyslog, elk etc. в который калбеком уже засылать
Timur
Можно напрямую в логстеш логи слать
tutunak
Можно напрямую в логстеш логи слать
Ну как я понял задача была просто оутпут сохранять прям на каждом сервере, без центрального логирования
Timur
хотелось бы задавать их на основе дистра
Подключайте разные варсы в зависимости от дистра
Timur
На основе фактов
Timur
When
Не надо when
Anonymous
ну раз уж Тимур говорит ) пойду по светлому пути
Anonymous
хоть все равно считаю костылем
Anonymous
ну я месяцев много у вас не сидел - небыло необходимости, так что скорей всего пропустил
Timur
- name: Load a variable file based on the OS type, or a default if not found include_vars: '{{ platform_vars }}' with_first_found: - '{{ ansible_os_family }}.yml' - '{{ ansible_distribution }}.yml' - default.yml loop_control: loop_var: platform_vars
Boris 🦍
Подключайте разные варсы в зависимости от дистра
А как «на основе» реализовать?
Anonymous
ну собствеено я так и понял
Anonymous
потому перепишу на такой вариант
Timur
В папку vars кладете файлы с переменными для разных дистров в соответствии с фактами
Timur
RedHat.yml Debian.yml и т.п.
Timur
Можете посмотреть как в наших ролях сделано
Timur
Они почти все разные дистрибутивы поддерживают
Anonymous
да я видел как так делают
Timur
А как «на основе» реализовать?
Вот же выше пример. Там что-то непонятно?
Timur
хоть все равно считаю костылем
Почему костылем-то? Самый простой и гибкий способ
Timur
Не нужно дублировать таски и обвешиваться when'ами
Anonymous
ну мб у меня не правильное понимание, но мне казалось что задать через set_facts удобнее
Timur
И если нужно добавить поддержку другого дистрибутива - достаточно просто положить еще один файл переменных с нужным названием, не меняя кода
Anonymous
тут пример не нанмого меньше с when
Anonymous
https://github.com/geerlingguy/ansible-role-postgresql/blob/master/tasks/variables.yml
Anonymous
да у вас защита стоит для инвалидов, что одним пальцем текст набирают 5 секунд
Timur
https://github.com/geerlingguy/ansible-role-postgresql/blob/master/tasks/variables.yml
Три одинаковых таски с when вместо одной, как у нас?
Timur
Это лучше?
Anonymous
у вас это где ?
Timur
у вас это где ?
В наших ролях. Вот тут можете глянуть: https://github.com/lean-delivery
Timur
Самая популярная роль: https://github.com/lean-delivery/ansible-role-java
Timur
А вот очень лаконичная роль: https://github.com/lean-delivery/ansible-role-docker
Timur
Но поддерживает несколько разных дистров
Timur
Есть роли, которые работают не только на Linux, но и на Windows
Timur
И тоже благодаря грамотному ветвлению
Anonymous
посмотрю, спасибо
Egor
Самая популярная роль: https://github.com/lean-delivery/ansible-role-java
кстати, а как вы оракл яву сейчас ставите?
Egor
только с локального имейджа? там же оракл в апреле политику сменил и теперь яву качать надо после атворизации на сайте
Timur
кстати, а как вы оракл яву сейчас ставите?
В смысле как? Как обычно - при наличии артифактов
Egor
а то я раньше жил на webupd8team репе, чтоб он напрямую с оракла качал
Egor
а теперь приходится у себя версию хранить 😞
Timur
Напрямую с оракла больше нельзя качать