Timur
Timur
Если нужно мержить - есть combine
Timur
Timur
А какова цель? Что с чем предлагается мержить?
Ivan
Ну есть дефолтные переменные роли в виде диктов. Есть хостварс, переопределить нужно только некоторые ключи.
Ivan
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
Aleksey
о чем я в самом начале написал )
Aleksey
получается не так красиво может, но практичней
Артём
База, группа, хост.
Ivan
Ivan
Ivan
username
Привет,
А есть модуль типа setup, но который может обнаруживать что то типа
08:00.0 VGA compatible controller: NVIDIA Corporation
или придётся городить огрод с
shell: lspci|grep nvidia
?
Суть задачи в чём, если обнаруживается видеокарта NVIDIA ставим дрова на неё, если AMD то на неё и.т.д и.т.п...
Timur
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 - словарь?
Denis
inqfen
С этим какие-то траблы были, точно уже не помню
inqfen
Работало с json
inqfen
А, ну как раз ты так и сделал
Sergey
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
George
касательно ЯМЛ в целом есть отличная статья - https://arp242.net/yaml-config.html
Timur
Но yamllint придерживается lower case правила
George
полностью согласен
Timur
Timur
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 он смотрит что уже был и не дописывает в файл?
Timur
George
@tgadiev подскажите - как тестировать не роли, а плейбуки
George
есть готовый мануал?
George
коллегам надо
Timur
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
Подскажите пожалуйста, как к дефолтному значению переменной в роли добавить данные из плея? Не хочется из дефолтного значения переписывать данные ещё раз, нужно просто расширить
George
George
Фреймворк для тестирования ролей