Timur
Часто люди подходят к ансиблу не с той стороны, используя стереотипы традиционных императивных скриптов
inqfen
В нем все совпадает, кроме словаря env, который передается контейнеру
inqfen
Мне нужно в зависимости от того, мастер это или слейв передать нужный env
inqfen
а это 2 разных словаря
Timur
inqfen
переменной node_type она задается в плейбуке
Artem
Подскажите как в jinja получить значение tag.
project_envs: {
"staging": {
"tag": "{{ lookup('env','IMAGE_TAG') | default('latest-staging', true)}}",
},
"production": {
"tag": "{{ lookup('env','IMAGE_TAG') | default('latest-production', true)}}",
}
}
При этом staging или production берется из другой переменой.
inqfen
типа если node_type == master, то env = master_env
Timur
Timur
С разбивкой по серверам?
Timur
Отлично
Timur
Только тогда логичнее перенести разбиение в группы
Timur
И вешать соответствующие переменные на group_vars
Timur
Тогда и в плейбуке ничего не нужно мутить
Timur
Сервер из группы подтянет все нужные переменные
inqfen
типа
hosts: slaves
tasks:
- name: postgres
include_role: postgres
vars:
node_type: slave
other_var: ...
inqfen
на хосты master соответственно переменная отличается
Timur
Timur
В group_vars
Timur
На группу slaves одни значения, на группу master - другие
Timur
И все
inqfen
Видимо придется, я для них не создавал отдельных group vars просто
Timur
Аналогично и с энвом
inqfen
Так как это единственное что отличается
Timur
Нужно просто использовать инструменты по назначению
Timur
А не втыкать костыли на пустом месте
Timur
Заодно и код роли предельно упрощается, без зависимостей от лишних переменных
Max
Max
Max
inqfen
Если у человека руки из жопы, то это его проблема как мне кажется
inqfen
Не надо на это ориентироваться)
Oleksandr
вопрос не в руках из жопы, а в сложности генерации
Oleksandr
у меня вот голова в жопу превращается, если я такое вот напишу
Oleksandr
https://everythingshouldbevirtual.com/automation/ansible-defining-variables-as-dictionaries/
inqfen
А конфиги сами не меняются?
inqfen
Я джинджирую так сказать, но у меня конфиги постоянны
inqfen
Туда просто нужные значения переменных из inventory идут
Oleksandr
А конфиги сами не меняются?
немного бекграунда:
конфиги нужны для пачки микросервисов. они живые. постоянно добавляются опции. например новые роуты.
сами конфиги надо генерировать потому что они используются сейчас в 6 окружениях + версионируются
inqfen
Ну тогда джинджа да
Max
Oleksandr
Oleksandr
сервиса типа consul/etcd
inqfen
inqfen
У самого так
inqfen
И if там же
Oleksandr
я это понимаю
Oleksandr
вопрос в том, как этот самолет поддерживать
inqfen
Потому что для тестинга и прода например конфиг может немного отличаться
Max
да. я понимаю это. но его нет
тогда можно спланировать данные для последующего внедрения такого сервиса.
управлять сложными вложенными данными обычно сложнее без сервиса, который может провести валидацию их 'законности'.
Oleksandr
Oleksandr
Oleksandr
но
Oleksandr
тогда будет под каждое окружение свой сервис
Max
Oleksandr
обязательно
Oleksandr
они должны быть автономными
Max
можно сделать сервис с namespaces
Oleksandr
не
Oleksandr
автономные
Max
🙏
Oleksandr
понял. спасибо)
Artem
Подскажите как в jinja получить значение tag?
btype: 'staging'
project_envs:
staging:
tag: VAL1
production:
tag: VAL2
Например это возвращает ошибку
{{project_envs[btype].tag}}
Max
Max
а, сорри, ступил может быть. оштбку покажешь?
Artem
сек
Artem
"project_envs[btype].tag": "VARIABLE IS NOT DEFINED!: 'dict object' has no attribute u'staging}}'"
Victor
Artem
да но откуда она появляется
- debug:
var: project_envs[btype].tag
Victor
Victor
Ну я тоже не вижу по присланному откуда, но, очевидно, где-то есть
Artem
btype: 'staging'
Shamil
Товарищи! Столкнулся с такой проблеммой: есть два хоста с CentOS 7, развернутые из разных "золотых" образов, прокручиваю на них плейбук, на одном все нормально, на втором ansible создает большую кучу процессов ssh-agent и не закрывает их по завершении плейбука. Настройки sshd идентичные. Не могу понять в чем дело. Кто-нибудь сталкивался с подобным поведением?
Vladislav 👻
Shamil
Да, на обоих делаю через ansible_become