Timur
Если нужно мержить - есть combine
Ivan
Если нужно мержить - есть combine
То есть отдельной таской в роли или пре таской в плейбуке?
Timur
А какова цель? Что с чем предлагается мержить?
Ivan
Ну есть дефолтные переменные роли в виде диктов. Есть хостварс, переопределить нужно только некоторые ключи.
Aleksey
Ну есть дефолтные переменные роли в виде диктов. Есть хостварс, переопределить нужно только некоторые ключи.
Ну в таком случае это наверное единственный вариант, но есть вероятность в будущем напороться самому на это, потому и нежелательно. Когда я пришел к выбору - включать ли merge для словаря, я выбрал переделать роль и разбить словарь на отдельные переменные. Пусть лучше где-то будет повторение, зато будет работать как ожидается по-умолчанию.
Ivan
Вопрос в том, где это делать корректнее, в самой роли или прямо в плейбуке?
Aleksey
мое мнение - роль должна ожидать только конкретную переменную, а вся сложная логика по объявлению этой переменной должна быть за пределами роли
Aleksey
так легче роль переиспользовать в разных окружениях, что делает ее универсальной
Aleksey
где-то эта сложная логика нужна, где-то нет, роль про это не знает
Aleksey
тогда в одной группе хостов можно переменную объявлять явно, в другой делать комбинации фильтров, а в третьем месте - передавать значения из плейбука или вообще из консоли. роль при этом остается одинаковой
Ivan
Ну я к тому что таска с when: override_default_<dict_name> is defined ни как не повлияет на поведение роли.
Ivan
или есть возможность смержить словари прямо в хост/груп варсах, до того, как ансибл перезапишет дефолтные переменные роли?
Aleksey
почему бы тогда это не делать в тех жн групп. переменных? dict: "{% if override is defined %} и т.д.
Aleksey
в переменных можно jinja conditions использовать
Ivan
ну например в дефолте роли: foo: bar: baz spam: egg В хостварс надо переопределить только foo.spam: test Как добраться до дефолтных переменных роли из хостварс?
Aleksey
никак. либо hash merge включать в конфиге, либо дублировать словарь из дефолта в хост варс, либо роль дополнять проверками. я бы второе выбрал.
Aleksey
опять же если бы у меня было несколько таких хостов в группе, я бы продублировал словарь из дефолта роли в груп варс, а на уровне хост варс можно сделать как ты хотел с оверрайд переменными и фильтром combine
Timur
Ну есть дефолтные переменные роли в виде диктов. Есть хостварс, переопределить нужно только некоторые ключи.
Лучше не делать дефолтные переменные в виде диктов. Если по отношению к ним предполагается раздельное обращение и независимое переопределение. Это best practice. Отдельные переменные гораздо легче переопределять на любом произвольном уровне, не привязываясь к внутренней структуре
Aleksey
о чем я в самом начале написал )
Aleksey
получается не так красиво может, но практичней
Артём
Ну есть дефолтные переменные роли в виде диктов. Есть хостварс, переопределить нужно только некоторые ключи.
name: add snmpd_proc_list_for_group set_fact: snmpd_proc_list: "{{ snmpd_proc_list }} + {{ snmpd_proc_list_for_group }}" when: snmpd_proc_list_for_group is defined
Артём
База, группа, хост.
Timur
Просто переменные вида: service_name_storage_parameter_one_subparameter_one service_name_storage_parameter_one_subparameter_two ... service_name_storage_parameter_one_subparameter_N Выглядят и читаются мягко говоря не очень.
Зато если вы решите добавить в роль для расширения еще пару переменных, скажем service_name_storage_parameter_one_subparameter_n2 и service_name_storage_parameter_one_subparameter_n3, то у вас не полетит вся логика плейбуков и не придется переделывать инвентари, чтобы не перестали работать старые плейбуки
Alex
можно было взять вакансию в городе..
Можно, но зачем. Зп у них не особо интересные. По крайней мере в Харькове
Timur
Так а если я новый ключ добавлю в дикт, как это повлияет на работу?
Придётся менять логику зачастую. Привязка к структуре данных в таком случае сильно ограничивает гибкость параметризации
username
Привет, А есть модуль типа setup, но который может обнаруживать что то типа 08:00.0 VGA compatible controller: NVIDIA Corporation или придётся городить огрод с shell: lspci|grep nvidia ? Суть задачи в чём, если обнаруживается видеокарта NVIDIA ставим дрова на неё, если AMD то на неё и.т.д и.т.п...
Denis
Всем привет. Подскажите, можно ли преопределить переменную, которая находится в defaults через --extra-vars ?
inqfen
Да
Alex
У extra-vars наибольший приоритет
Denis
Да
Я просто сейчас замечаю следующую проблему. Есть переменная image.tag в defaults. Пытаюсь ее преопределить через --extra-vars="image.tag=0.1.0", в итоге ничего не происходит. Сработало только следующим образом --extra-vars "@image.yml"
inqfen
Image - словарь?
inqfen
С этим какие-то траблы были, точно уже не помню
Denis
С этим какие-то траблы были, точно уже не помню
Блин, только так сработало: --extra-vars="{'image': {'tag': '0.1.0'}}"
inqfen
Работало с json
inqfen
А, ну как раз ты так и сделал
Denis
Работало с json
ага, понял спасибо
Vitaliy
Большое спасибо авторам. Где бы еще таких рецептов "# bad/# good" почитать. https://lean-delivery.com/ansible-development-kit/docs/ansible_style_guide
George
@tgadiev Why? The main reasoning behind this is that Python have same convention for boolean values.
George
а ничего, что в питоне True/False, а не true/false?
George
это, кстати, один из моментом, от которого у меня бомбит
George
Long strings я бы вообще не рекомендовал пользоваться этим синтаксимо - он слишком мозголомный
Timur
а ничего, что в питоне True/False, а не true/false?
Да, вы правы. Можете внести правку
George
касательно ЯМЛ в целом есть отличная статья - https://arp242.net/yaml-config.html
Timur
Но yamllint придерживается lower case правила
George
полностью согласен
George
Но yamllint придерживается lower case правила
я думаю, что здесь речь больше про uniform чтоб было, а не то, какой именно вариант возьмем
George
Выступая - критикуй Критикуя - предлагай
я просто обратил внимание на нестыковку
George
либо я просто не понял, что подразумевалось (из текста я понял, что выбран питонячий true/false), либо лучше переформулировать
es]x
подскажите как заставить модуль line с новой строки - name: gpg_check disable for erlang repos lineinfile: path: /etc/yum/pluginconf.d/rhnplugin.conf insertafter: 'EOF' line: > [erlang] \ gpgcheck = 0 become: True
es]x
нашел, говорят loop
es]x
как можно обойти то что loop: - "[erlang]" - gpgcheck = 0 - "[Rabbitmq]" - gpgcheck = 0 второй gpgcheck он смотрит что уже был и не дописывает в файл?
es]x
blockinfile
Спасибо попробую
George
@tgadiev подскажите - как тестировать не роли, а плейбуки
George
есть готовый мануал?
George
коллегам надо
George
ээм. В молекуле?
Timur
Да
George
можно развернуть, пожалуйста?
Timur
Просто в сценарии задаете нужную плейбуку для тестов
Timur
В секции provisioner можно указывать плейбуки
Timur
provisioner: name: ansible playbooks: create: ../default/create.yml destroy: ../default/destroy.yml converge: playbook.yml
Timur
Указываете нужную плейбуку типа converge - и именно она будет использована на этой стадии
Nikita
Подскажите пожалуйста, как к дефолтному значению переменной в роли добавить данные из плея? Не хочется из дефолтного значения переписывать данные ещё раз, нужно просто расширить
es]x
ээм. В молекуле?
а можно по подробнее, что это?
George
Фреймворк для тестирования ролей