Oleksandr
программирование на конфигах. любимые грабли же.
ну это не совсем программирование. логики же нет в конфигах. так, параметризация..
Pavel
то есть в инвентори переменные для груп не совсем правильно юзать? лучше в плейбук всё?
Правильнее переменные для групп скидывать в group_vars/groupname.yml
Oleksandr
ну так то же самое будет?
Oleksandr
если один хост в двух группах окажется, то непонятно, какую переменную возьмёт?
Pavel
Но конкретно твой кейс - применение переменной target кривое на мой взгляд
Pavel
сделай 2 переменные is_frontend и is_backend
Pavel
И тогда коллизий не будет
Pavel
роль deploy сможет производить действия в зависимости от того, в какую группу входит хост и даже если входит в обе
Oleksandr
ок, а если переменная например path
Pavel
Тогда какова должна быть логика если хост входит одновременно в 2 группы?
Oleksandr
во фронтенде path=/var/www, в бекенде - /opt
Oleksandr
ну вот я решил на один хост и фронтенд и бекенд задеплоить, почему нет?
Oleksandr
а на некоторые хосты только бекенд
Pavel
Тогда тебе надо передавать в роль непосредственно эту переменную. roles: - { role: deploy, target: frontend }
Dmitry
ок, а если переменная например path
тогда frontend_path, backend_path и т.д.
Pavel
Если роль универсально использует переменную path, то эту переменную надо в нее передавать в момент подключения в плейбуке
Dmitry
что за упорное игнорирование неймспейсов (хотя бы и костыльных) и эти вечные попытки выстрелить себе в ногу?
Oleksandr
тогда frontend_path, backend_path и т.д.
так плейбуку например индиффирентно. он берёт из гита код и кладёт его в директорию. поэтому я хочу просто указать в переменной путь
Oleksandr
Если роль универсально использует переменную path, то эту переменную надо в нее передавать в момент подключения в плейбуке
тебе не кажется это как-то криво? у меня есть несколько групп и параметр, который отличается в зависимости от того, в какой группе хост. в us-west-dc днс один, в us-east-dc днс второй. логично положить его в переменную nameserver, которая в зависимости от группы хостов будет принимать разное значение
Oleksandr
что за упорное игнорирование неймспейсов (хотя бы и костыльных) и эти вечные попытки выстрелить себе в ногу?
а что ты подразумеваешь под костыльными неймспейсами? я нихочу игнорировать их :)
Pavel
> отличается в зависимости от того, в какой группе хост. в us-west-dc днс один, в us-east-dc днс второй. да но в данном случае отображение не взаимно однозначное. Если хост в двух группах, то у тебя этот параметр уже не определен однозначно. Таким образом, переменная это неподходящий способ передавать параметр
Pavel
Так что тут ты вручную сам указываешь какой именно параметр использовать роли, в зависимости от того в какую группу входит хост. Это нормально и не криво.
Oleksandr
ну логично..
Oleksandr
но всё равно странно что для разных групп нельзя определить одну переменную, несмотря на то, что хост может быть в разных группах
Pavel
Ты можешь даже эту роль дважды подключать в плейбуке. 1 раз если хост фронтенд, и второй раз если хост бэкенд
Pavel
Будет 2 раза деплоиться у тебя
Oleksandr
ну вот так и придётся делать
Oleksandr
а если кроме плейбука деплой есть ещё и плейбук бекап, а ещё и плейбук мониторинг, то в КАЖДОМ плейбуке я должен буду определить переменную path. а так бы только в group_vars её вписал и всё ^^
Oleksandr
но я понял, ок )
Pavel
> а так бы только в group_vars её вписал и всё так бы - это как бы? Какого поведения ты хочешь добиться?
Pavel
Ты не можешь сформулировать, как должна разруливаться коллизия переменной в случае вхождения хоста в несколько групп, ансиболь тут не поможет.
Oleksandr
> а так бы только в group_vars её вписал и всё так бы - это как бы? Какого поведения ты хочешь добиться?
хочу чтобы в зависимости от группы, значение параметра различалось
Oleksandr
куда уж подробнее. есть параметризованная сущность, есть плейбуки, где в зависимости от параметра, выполняются определённые действия
Pavel
хочу чтобы в зависимости от группы, значение параметра различалось
Это не формулировка. Какая зависимость конкретно? Что делать в случае если входит в 2 группы? У меня понимания не возникло.
Pavel
Получается что да, в каждую роль надо вписывать чтобы убрать неоднозначность
Oleksandr
завтра напишу ещё, если ты здесь будешь :)
Pavel
буду
nvkv
Чуваки, я туплю или нет? Есть таск docker_service, в дескрипшоне docker-compose, который собирает образ. Я поставил build: yes в надежде на то, что эта шняга будет пересобирать образ даже если он уже есть в системе.
nvkv
а она не пересобирает
nvkv
сука такая
Dima
и?
Dima
ты сказал ему recreate: always|never|smart?
nvkv
гм, нет, не сказал
nvkv
ща попробую
Dima
ну а если не сказал, то там NO по дефолту, почему сразу сука то )
nvkv
там smart по-дефолту
nvkv
если чо
nvkv
ну ща проверю
nvkv
сработало
Denis 災 nobody
А ансиблил кто фрисвичи? )
jagga
хочешь поймать рак мозга?
Denis 災 nobody
С чем?
jagga
с вышеуказанным)
Denis 災 nobody
С ансиблом? )
jagga
с фрисвичами)
Denis 災 nobody
Есть неудачный опыт?
Denis 災 nobody
У нас пока 2 года более-менее удачного
jagga
на мой взгляд эта софтина из разряда работает не трогай
Denis 災 nobody
Это астер
Denis 災 nobody
Хотя я сам пару сегфолтов зарепортил, но не считая слабой поддержки и несколько долбанутых разрабов - норм продукт. И держит куда больше звонков, чем астер. И тут это оффтоп, го тогда в @ru_voip
Dmitrii
Всем привет. Пытаюсь заставить работать кейс с динамическими именами групп в хостах, и что-то не работает. Пример: - name: ... hosts: localhost connection: local tasks: - set_fact: timestamp="{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}" register: timestamp - name: ... hosts: "foobar-{{ timestamp }}" become: true gather_facts: true vars: ansible_ssh_key: "/tmp/id_rsa_{{ timestamp }}" tasks: - ...
Dmitrii
Т.е. в первой части я работаю "локально" и поднимаю инстанс AWS, назначаю ему уникальную группу. Добавляю в инвентори в рантайме. Затем мне надо поработать с ним. Т.е. эту группу надо как то теперь указать в hosts
Dmitrii
И вот переменная чет не шарится
Dmitrii
Инвентори файла нету, точнее я его не использую т.к. писать туда особо нечего. Плейбук расчитан на один запуск - создание и уничтожение инстанса
Dmitrii
Но могут быть запущены параллельно, поэтому у каждого свой группа и теги у инстанса
Dmitrii
Или я что-то не так делаю и это можно упростить?
Aleksey
надо динамик инвентори заюзать вроде как
Aleksey
и вроде как он из коробки есть для авс
Dmitrii
Так у меня нет хостов в амазоне до запуска
Dmitrii
Я их создаю в плейбуке и уничтожаю сразу. В этом кейсе работать без инвентори файлов было бы идеальным раскладом
Dmitrii
Ведь ансибл позволяет напихивать в рантайм хосты
Aleksey
http://devdocs.io/ansible/add_host_module
Aleksey
не оно?
Mikhail
В доках же есть примеры как обращать к только что сделанному инстансу на амазоне
Dmitrii
Оно то оно. Только у меня имя группы динамическое
Dmitrii
Зависит от timestamp