Alexander
Возвращается такой вот объект от API Netbox
Alexander
Timur
Alexander
Alexander
Ну т.е. я не понимаю как фильтр записать. Например, role.slug == 'virtual-machine' исправно работает, группирует хосты в группу 'virtual-machine'
Timur
Alexander
Да, я пробовал по group_by, нормально работает, хочу этим тоже сделать.
Alexander
Для посмотреть, что удобнее
Timur
Судя по окончанию картинки, там объект внутри списка
Alexander
Ну да.
Alexander
Alexander
group_by ограничен списком атрибутов
Alexander
Но тэги там есть, да.
Timur
Вы вообще знаете, для чего этот модуль?
Timur
Он никак не относится к инвентори
Timur
Тогда у вас просто неверно задано условие
Alexander
В доке сказано, что "Add hosts to group based on Jinja2 conditionals." Т.е. обчное 'in' не покатит?
Timur
Timur
Нужно нормальное jinja2 условие
Timur
По сути шаблон
Alexander
Timur
https://jinja.palletsprojects.com/en/master/templates/#if
George
Ссылку утащил к себе
Alexander
jinja2 if else вам пример нужен?
Нет, это я понимаю. Я не могу это сформулировать чтобы плагин скушал. Как я понимаю, ему нужно указать:
groups:
имя_группы: условие
Qwerty
Коллеги, подскажите, есть переменная iface_private, она определена у каждой группы, и может быть разной.
Конфиг генерируется на стороне бекенда и в нем фигурирует следующая конструкция:
db_servers_ips: "{{ hostvars | get_group_ips(groups['db_servers'], iface_private) }}" Если переменные iface_private одинаковые, то все без проблем, но если они разные то естественно, возникают проблемы, так как iface_private передается от бекенд-группы.
Как сделать так, чтобы переменная в вышеуказанном запросе использовалась от группы db_servers?
Timur
Коллеги, подскажите, есть переменная iface_private, она определена у каждой группы, и может быть разной.
Конфиг генерируется на стороне бекенда и в нем фигурирует следующая конструкция:
db_servers_ips: "{{ hostvars | get_group_ips(groups['db_servers'], iface_private) }}" Если переменные iface_private одинаковые, то все без проблем, но если они разные то естественно, возникают проблемы, так как iface_private передается от бекенд-группы.
Как сделать так, чтобы переменная в вышеуказанном запросе использовалась от группы db_servers?
Никак. Если переменные в разных группах пересекаются, то переменные с большим приоритетом затирают остальные
Timur
Не нужно допускать таких пересечений, если не хотите подобных проблем
Qwerty
Timur
Тогда делайте разные названия для переменных разного уровня
Timur
Странно удивляться тому, что вы неправильно используете групповые переменные
Qwerty
Qwerty
Timur
Обращаться к переменным другой группы с хостов не из этой группы можно примерно так:
{{ hostvars[groups['db_servers'][0]]['iface_private_dbservers'] }}
Alexander
$ cat inventory/hosts.yml
---
a:
hosts:
localhost
b:
hosts:
localhost
$ cat inventory/group_vars/a
aaa: "a_var"
$ cat inventory/group_vars/b
aaa: "b_var"
$ cat var_a.yml
---
- hosts: a
connection: local
gather_facts: no
tasks:
- name: test
debug:
msg: "{{ aaa }}"
$ cat var_b.yml
---
- hosts: b
connection: local
gather_facts: no
tasks:
- name: test
debug:
msg: "{{ aaa }}"
Alexander
$ ansible-playbook -i inventory/ var_a.yml
PLAY [a] *******************************************
TASK [test] *******************************************
ok: [localhost] => {
"msg": "b_var"
}
PLAY RECAP *******************************************
localhost: ok=1 changed=0 unreachable=0 failed=0
$ ansible-playbook -i inventory/ var_b.yml
PLAY [b] *******************************************
TASK [test] *******************************************
ok: [localhost] => {
"msg": "b_var"
}
PLAY RECAP *******************************************
localhost: ok=1 changed=0 unreachable=0 failed=0
Alexander
???
Alexander
Если сделать так:
$ cat inventory/hosts.yml
---
a:
hosts:
localhost
b:
hosts:
127.0.0.1
То работает.
Alexander
Как это объяснить?
Alexander
На уровень хоста спускается при парсинге, наверное.
Alexander
И мержит все хосты, если IP/DNS совпадает
Alexander
Если засунуть в общую группу эти две группы - всё ломается :(
George
Эти факты ещё раз доказывают, что модель групп и переменных в ансибл недодумана
Timur
Timur
???
А что вас смущает? Вы пытаетесь два значения одной и той же переменной повесить на один хост
Timur
У одной переменной не может быть два значения
Timur
Все переменные в рамках хоста получают одно итоговое значение в соответствии с приоритетом
Alexander
Это замечательно. Плохо то, что это считается одним хостом.
Vladislav 👻
Никто не мешает сделать второй альяс хоста для того же хоста
Timur
Какой кошмар
Timur
Если хотеть странного - нужно быть готовым к неожиданным результатам
Отделение Bereke Bank
Ждун
Сколько сарказма
Alexander
Какой кошмар
Кошмар - это реализация группировки в ansible.
Alexander
Ну аргумент "сам дурак" это мощно, да...
Sergey
Другая тема.
Господа хорошие, я тут поколдовал над штатным инвентори-плагином, и получилась любопытная штука.
Приделал поддержку групповых меток.
Каждой группе хостов можно назначить некие метки, и группы с одинаковыми метками обрабатываются в итоге так, как будто вложены в одну группу, названную именем метки.
Типа вот такого:
https://pastebin.com/ZwQYH8K1
Oleksandr
Sergey
Наоборот. При парсинге метки исчезают, остаются только обычные группы.
Timur
Ну аргумент "сам дурак" это мощно, да...
В документации ясно написано:
- не мочить гремлинов водой
- не кормить гремлинов после полуночи
Если нарушить запрет - возможны непредсказуемые результаты!
Приходит человек с жалобой на то, что он решил покормить гремлинов после полуночи, предварительно их намочив, и получается какая-то хрень.
Что можно сказать про такого человека?
Anton
Anton
Oleksandr
Рефреш и все ок
Sergey
Timur
Alexander
Sergey
Alexander
Человеку говорят - реализация глупая, а он - в доках написано так, значит это благодать.
Что можно сказать про человека?
Sergey
Alexander
Sergey
Что не так?
Рассказываешь, почему Ansible-плохо.