Timur
а 2 роли сделать не вариант? имхо это как раз правильный паттерн
Если отличия в паре тасков, то отдельная роль - излишество
Dmitry
Все мы знаем как отличия в паре тасков превращаются в огромную портянку
Dmitry
и потом когда мы применяем роль мы на 100% не уверены что происходит под капотом
Dmitry
имхо на каждый класс должна быть своя роль, и если классы не связаны между собой то тем более
Dmitry
Но у меня реально роли отличаются парой тасков)
Да, тогда норм наверное. Но я вообще старюсь избегать кондишеналов по внешним факторам в ролях
George
Да, тогда норм наверное. Но я вообще старюсь избегать кондишеналов по внешним факторам в ролях
у меня стойкое ощущение, что роль сама должна определять среду, чтобы не писать кондишионалы
Dmitry
у меня стойкое ощущение, что роль сама должна определять среду, чтобы не писать кондишионалы
ну да, и по идее это должно диктоваться структурой ansible репозитория
Sergey
Но у меня реально роли отличаются парой тасков)
Зависит от отличий. Иногда нужно просто очень аккуратно написать роль, тогда результат будет зависеть только от входных параметров, которые уже спокойно определяются в inventory.
George
ну, да, просто есть много любителей накатывать роль на непонятно что
Timur
Да, тогда норм наверное. Но я вообще старюсь избегать кондишеналов по внешним факторам в ролях
Что значит «внешний»? Сама концепция ролей в ансибле как раз и существует для того, чтобы одни и те же плейбуки можно было использовать в разном окружении с разным набором параметров.
Timur
Изменение дефолтного параметра роли через плейбуку или инвентори - это стандартный способ использования роли
Dmitry
например, параметры из других хостов
Timur
Внешние факторы - это те, которые не починяются стандартным правилам передачи параметров через scope
Задание параметра роли в инвентори - нестандартный способ передачи?
Dmitry
или hostvars['localhost']['cloudformation']
Dmitry
но когда мы ссылаемся в роли на значения параметров из другого хоста - это не правильно
Timur
но когда мы ссылаемся в роли на значения параметров из другого хоста - это не правильно
А где вы тут видели в роли ссылку на параметры другого хоста?
Timur
Вроде, никто не предлагал подобного
Dmitry
А где вы тут видели в роли ссылку на параметры другого хоста?
Ну на ваших сообщениях клин светом не сошелся, when: "'frontends' in group_names", например
Timur
Поэтому я предложил более простой и стандартный
Sergey
:-) Ужасный ведь способ. Тем более, что у Ансибла есть прямо таки штатный способ назначения таско хостам - сборка их в роли, и назанчение ролей группам.
Dok
Сначала были роли самостоятельные, потом выносился общий знаменатель в отдельную роль, потом в ролях стали появляться when, и в итоге, получилась каша)
Sergey
when - это из башсибла прокралось 😉
Sergey
императивное такое себе
Anton
Коллеги, есть задача менять файл конфига внутри докер контейнера, кроме как через command: docker cp ... ничего не нашел. Есть какая-то штатная возможность запихивать файл внутрь контейнера не пересобирая образ?
Timur
А ансибл тут при чем?
Womchik
volume?
Womchik
и да. каналь не тот
Anton
volume не хочется пользовать, если контейнер убивается должен исчезать с всем содержимым, а разворачивается все ансиблом
Timur
Можно как к машине подцепиться к контейнеру
Anton
вот не нашел такой возможности в docker_container
Timur
https://docs.ansible.com/ansible/latest/plugins/connection/docker.html
Timur
Я про плагин
Anton
Судя по описанию то что нужно, странно что пропустил его. Спасибо!
Timur
Это не модуль, а плагин
Timur
После создания и сетапа контейнеров стандартными модулями нужно делать отдельный плей, где подключаться к созданным контейнерам через этот плагин и работать с ним, как с обычным инстансом, выполняя произвольные модули ансибла
Vladislav 👻
А направьте меня в нужное русло пожалуйста: поднимается виртуалка с пабликом ключом, надо расскатать свои ключи, я думаю сгенерить отдельный приват ключ, но пока не понимаю, куда его положить и как пояснить ansible, что первоначально один пользователь и приватный ключ?
Vladislav 👻
Неее
Vladislav 👻
По сути, мне надо сделать первичную настройку через отдельный приват ключ
Vladislav 👻
Я вот думаю, как бы приват ключ завязать только на плейбук/роль?
Vladislav 👻
Хост/группа не канает, т.к. тогда всегда будет подменяться приват-ключ
igi
Ну можно указать как переменную в плейбке/роли
igi
Или даже передавить с ключом -е при запуске
Vladislav 👻
спасибо, что-то утром туплю 🙈
Anonymous
Hi anyone know how to install apache in solaris using anaible playbook
Dok
Можно сделать инклуд опциональных тасков, вызываемых по условию
https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html Оно же?
Dok
Класс)
Timur
Только эхо через шелл в ансибле - это полная ересь :)
Dok
Ну, если через дебаг только)
Timur
Да, для вывода сообщений есть дебаг
Timur
модули command, shell и т.п. лучше вначале вообще не использовать
Timur
Пока не изучите ансибл на достаточном уровне для понимания
Dok
Да я уже несколько месяцев на нём. Просто, изучаю не по порядку
Dok
расскажи подробне? интересно было бы узнать что ставишь и где упераешься
Ну, сначала были просто перечисления команд в ролях. Т.е. были роли linux и backend. linux - все основные изменения для всех. backend - всё остальное, что нужно запустить после linux, чтоб получить бэкенд. Потом, изучились методы when и include_role, тем самым, образовав роли php и nginx. Т.е. к тому моменту уже были роли backend, static, video, frontend и пр. и во всех было одно общее - установка и основные конфиги php и nginx. Теперь в этих ролях такие блоки - include_role: name=php - include_role: name=nginx А сами роли nginx и php состоят примерно так - name: Стоит ли PHP7.1? stat: path="/usr/bin/php7.1" register: php_chk - block: ... when: php_chk.stat.exists == False Теперь же всё упёрлось в то, что одним надо одно значение в основном конфиге держать, другим другое. За тем я и ищу условие, которое можно определить для всех ролей в переменной template. Как оказалось, вариантов несколько.
Timur
> include_role: name=nginx не используйте в ролях строчный синтаксис
Dok
Почему?
Dok
Это удобно и наглядно
Timur
??? вы смеетесь?
Dmitry
Это удобно и наглядно
Если появится больше одного параметра - будет нечитаемо. Проще сразу приучаться
Timur
Если параметров модуля больше одного, то все удобство пропадает моментально
Dok
Ничуть. Вот мне не сразу видны все уровне в этом примере из документации, например.
Dok
Если появится больше одного параметра - будет нечитаемо. Проще сразу приучаться
- name: Делаем папки! file: path="{{ item.path }}" state=directory owner={{ item.owner }} group={{ item.group }} mode={{ item.mode }} with_items: - { path: '/var/log/php-fpm', owner: root, group: root, mode: "0755" } - { path: '/var/www/scripts', owner: www-data, group: www-data, mode: "0775" } Да вполне себе удобно)
Dok
Ну, каждому своё)
Timur
Тут плохо все
Dmitry
Больше фигурных скобочек богу фигурных скобочек