
Navern
02.08.2016
18:25:26
как собралось:)

Pavel
02.08.2016
18:25:45
угу если поменяешь порядок объявления групп то все может измениться

Navern
02.08.2016
18:26:35
Ну да. И это фигово. Поэтому если хост один в двух группах, то лучше иметь разные переменные для него(названия)

Aleksandr
02.08.2016
18:27:21
ну вот гипотетитечкая ситуация. две группы, фронтенд и бекенд. есть роль деплой, которая деплоит в зависимости от значения переменной. хочу в одной группе target=frontend, в другой target=backend

Google

Aleksandr
02.08.2016
18:28:22
а в плейбуке как-то так
- hosts: frondend_group
roles:
- deploy
а оно может взять переменную из другой группы
я что-то делаю не так?

Pavel
02.08.2016
18:33:20
Да, переменная не может одновременно иметь два значения
Тогда тебе надо передавать в роль непосредственно эту переменную.
roles:
- { role: deploy,
target: frontend
}

Aleksandr
02.08.2016
19:23:18
мда, печально
если переменных много, это будет не очень удобно
разве что как-то так:
[group1]
host1 ansible_host=hostname
[group1:vars]
var=1
[group2]
host2 ansible_host=hostname
[group2:vars]
var=2
но это как-то совсем костыль

Pavel
02.08.2016
19:28:09
Если переменных много и все сильно меняется, то стоит разделить один плейбук на два
Так как они выполняют разные задачи

Dmitry
02.08.2016
19:29:00
программирование на конфигах. любимые грабли же.

Aleksandr
02.08.2016
20:02:04

Google

Aleksandr
02.08.2016
20:02:30

Pavel
02.08.2016
20:03:54

Aleksandr
02.08.2016
20:04:19
ну так то же самое будет?
если один хост в двух группах окажется, то непонятно, какую переменную возьмёт?

Pavel
02.08.2016
20:05:14
Но конкретно твой кейс - применение переменной target кривое на мой взгляд
сделай 2 переменные is_frontend и is_backend
И тогда коллизий не будет
роль deploy сможет производить действия в зависимости от того, в какую группу входит хост и даже если входит в обе

Aleksandr
02.08.2016
20:07:01
ок, а если переменная например path

Pavel
02.08.2016
20:07:25
Тогда какова должна быть логика если хост входит одновременно в 2 группы?

Aleksandr
02.08.2016
20:07:28
во фронтенде path=/var/www, в бекенде - /opt
ну вот я решил на один хост и фронтенд и бекенд задеплоить, почему нет?
а на некоторые хосты только бекенд

Pavel
02.08.2016
20:08:39
Тогда тебе надо передавать в роль непосредственно эту переменную.
roles:
- { role: deploy,
target: frontend
}

Dmitry
02.08.2016
20:08:40

Pavel
02.08.2016
20:09:08
Если роль универсально использует переменную path, то эту переменную надо в нее передавать в момент подключения в плейбуке

Dmitry
02.08.2016
20:09:10
что за упорное игнорирование неймспейсов (хотя бы и костыльных) и эти вечные попытки выстрелить себе в ногу?

Aleksandr
02.08.2016
20:09:32

Dmitry
02.08.2016
20:09:48

Aleksandr
02.08.2016
20:11:54

Google

Aleksandr
02.08.2016
20:12:24

Pavel
02.08.2016
20:14:22
> отличается в зависимости от того, в какой группе хост. в us-west-dc днс один, в us-east-dc днс второй.
да но в данном случае отображение не взаимно однозначное. Если хост в двух группах, то у тебя этот параметр уже не определен однозначно. Таким образом, переменная это неподходящий способ передавать параметр
Так что тут ты вручную сам указываешь какой именно параметр использовать роли, в зависимости от того в какую группу входит хост. Это нормально и не криво.

Aleksandr
02.08.2016
20:17:53
ну логично..
но всё равно странно что для разных групп нельзя определить одну переменную, несмотря на то, что хост может быть в разных группах

Pavel
02.08.2016
20:21:00
Ты можешь даже эту роль дважды подключать в плейбуке. 1 раз если хост фронтенд, и второй раз если хост бэкенд
Будет 2 раза деплоиться у тебя

Aleksandr
02.08.2016
20:21:15
ну вот так и придётся делать
а если кроме плейбука деплой есть ещё и плейбук бекап, а ещё и плейбук мониторинг, то в КАЖДОМ плейбуке я должен буду определить переменную path. а так бы только в group_vars её вписал и всё ^^
но я понял, ок )

Pavel
02.08.2016
20:43:01
> а так бы только в group_vars её вписал и всё
так бы - это как бы? Какого поведения ты хочешь добиться?
Ты не можешь сформулировать, как должна разруливаться коллизия переменной в случае вхождения хоста в несколько групп, ансиболь тут не поможет.

Aleksandr
02.08.2016
20:56:40
куда уж подробнее. есть параметризованная сущность, есть плейбуки, где в зависимости от параметра, выполняются определённые действия

Pavel
02.08.2016
21:00:18
Получается что да, в каждую роль надо вписывать чтобы убрать неоднозначность

Aleksandr
02.08.2016
21:01:21
завтра напишу ещё, если ты здесь будешь :)

Pavel
02.08.2016
21:01:29
буду

Google

Semyon
03.08.2016
09:39:17
Чуваки, я туплю или нет?
Есть таск docker_service, в дескрипшоне docker-compose, который собирает образ.
Я поставил build: yes в надежде на то, что эта шняга будет пересобирать образ даже если он уже есть в системе.
а она не пересобирает
сука такая

lastsky
03.08.2016
10:04:41
и?
ты сказал ему recreate: always|never|smart?

Semyon
03.08.2016
10:05:26
гм, нет, не сказал
ща попробую

lastsky
03.08.2016
10:05:52
ну а если не сказал, то там NO по дефолту, почему сразу сука то )

Semyon
03.08.2016
10:06:04
там smart по-дефолту
если чо
ну ща проверю
сработало

Denis 災 nobody
03.08.2016
16:30:25
А ансиблил кто фрисвичи? )

jagga
03.08.2016
17:07:01
хочешь поймать рак мозга?

Denis 災 nobody
03.08.2016
17:07:16
С чем?

jagga
03.08.2016
17:07:38
с вышеуказанным)

Denis 災 nobody
03.08.2016
17:08:05
С ансиблом? )

jagga
03.08.2016
17:08:17
с фрисвичами)

Denis 災 nobody
03.08.2016
17:08:33
Есть неудачный опыт?

Google

Denis 災 nobody
03.08.2016
17:09:00
У нас пока 2 года более-менее удачного

jagga
03.08.2016
17:09:39
на мой взгляд эта софтина из разряда работает не трогай

Denis 災 nobody
03.08.2016
17:10:38
Это астер
Хотя я сам пару сегфолтов зарепортил, но не считая слабой поддержки и несколько долбанутых разрабов - норм продукт. И держит куда больше звонков, чем астер. И тут это оффтоп, го тогда в @ru_voip


Dmitrii
06.08.2016
09:37:23
Всем привет. Пытаюсь заставить работать кейс с динамическими именами групп в хостах, и что-то не работает. Пример:
- 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:
- ...
Т.е. в первой части я работаю "локально" и поднимаю инстанс AWS, назначаю ему уникальную группу. Добавляю в инвентори в рантайме. Затем мне надо поработать с ним. Т.е. эту группу надо как то теперь указать в hosts
И вот переменная чет не шарится
Инвентори файла нету, точнее я его не использую т.к. писать туда особо нечего. Плейбук расчитан на один запуск - создание и уничтожение инстанса
Но могут быть запущены параллельно, поэтому у каждого свой группа и теги у инстанса
Или я что-то не так делаю и это можно упростить?


Алексей
06.08.2016
09:41:34
надо динамик инвентори заюзать вроде как
и вроде как он из коробки есть для авс