Sergey
Надеюсь, тебе зарплату начисляют не обратно пропорционально количеству плеев? Их вообще может быть ровно столько, сколько тебе нужно.
Отделение Bereke Bank
да я тебе скинул)
Отделение Bereke Bank
попробуй
Stepan T.
Парни. Сломал голову. Модулем vmware_guest разворачиваю (или проверяю их наличие) виртуалки. Имя виртуалки указано как '{{ inventory_hostname }}', создаётся перечень виртуалок, по списку ansible_play_batch, всё регистрируется (register: vm) . Всё классно. Есть выхлоп вида ansible_hostname1 и ansible_hostname2 о том, что модуль создал виртуалки, есть выхлоп по переменной vm. Не получается с помощью add_host добавить больше одного ip из выхлопа для vm. Гуглил. Пробовал. Не понимаю.
Stepan T.
- name: Set Facts
set_fact:
vm_name: '{{vm.instance.hw_name }}'
vm_ip: '{{vm.instance.ipv4 }}'
- name: Test var
debug:
var: vm_name,vm_ip
вот это даёт выхлоп:
ok: [dc1] => {
"vm_name,vm_ip": "('dc1', '10.7.78.43')"
}
ok: [dc2] => {
"vm_name,vm_ip": "('dc2', '10.7.78.107')"
}
Отделение Bereke Bank
Не хочешь group_vars - есть другой вариант)
У тебя будет по 1 инвентори и по 1 extra vars файлу на каждый проект.
И роль, которая ничего не знает о группах.
Вызывать свой плейбук будешь соответственно так.
ansible-playbook -i hosts playbook.yml -e @extra_vars.yml
Cам плейбук
...
hosts: "{{ groups[my_shit_group] }}"
roles:
- role: my-shit-role
...
my_shit_group - переменная с имем твоей группы в инвентори, обозначенная так же в extra vars.
Появляется новый проект - создаешь рядом еще 1 инвентори, еще 1 extra vars файл, корректируешь его и запускаешь плейбук
Можешь у меня подсмотреть, если разберешься https://github.com/erzh1906/kubernetes-playbook
Grek 🇺🇦
сделай луп
Stepan T.
Но упихать в add_host связку inventory_hostname и ip не получается
Stepan T.
Делал.
Grek 🇺🇦
Stepan T.
Уже не покажу. Я тут конвульсивно всё правлю.
Stepan T.
Ща покажу пример.
Grek 🇺🇦
я делаю register после деплоя всех ВМ и потом в лупе добавляю через add hosts
Stepan T.
Grek 🇺🇦
Отделение Bereke Bank
Не надо ничего описывать в роли
Отделение Bereke Bank
Ну максимум defaults
Отделение Bereke Bank
где?
Grek 🇺🇦
в ногу выстрелить тебе ник-то не может запретить, но при этом ружья продаются
Отделение Bereke Bank
нет
Sergey
Ты про объектную модель прочитал?
Sergey
Ирония? Или ты про роли как раз пропустил, поэтому спрашиваешь то, что спрашиваешь? Так или иначе, роли не должны ничего знать про группы, но зато прекрасно умеют получать параметры.
Stepan T.
Elenhil
Отделение Bereke Bank
ну ты посмотри в тасках для чего эти варсы используются) и как это связано с твоим кейсом
Elenhil
это переменные, которые крайне нежелательно менять вне роли, это вообще не то, лол
Elenhil
доки то читни хоть
Elenhil
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable
Elenhil
Sergey
Ну Володь, вот ты всё знаешь, а чего хочешь-то тогда? Как сделать странное - тебе сказали, тебе по своим ногам стрелять не жалко - ок, всё хорошо, о чём тогда дискуссия-то?
Aleksey
буэ
Aleksey
в плей сделать преобразование
role: blablal
vars:
prod: {{ "'productive' in group_names"}}
Aleksey
а из роли убери
Aleksey
а лучше туда что нить типа ternary на тип. или проброс окружения.
Aleksey
это будет в разы лучше чем смотреть на список ролей. но всё равно так себе. но уже поднимает идемпотентность роли
Aleksey
я тред не читал сагрился на только то выражение которое говорю
Aleksey
так вот на группу в роли смотреть ненадо. смотри на спец переменную
Aleksey
а ее ставь от группы
Aleksey
группу далее чем в плей тащить не надо. это стремно
Aleksey
не сможешь переиспользовать роль
Aleksey
и только лишь
Aleksey
ну и молекулу задолбаешься писать
Aleksey
не используешь молекулу ?
Aleksey
гори в огне
Aleksey
вроде нормально же общались. nixos, guix много кода. как без тестов то ?
Aleksey
а чем молекула не угодила ? впрочем это офтоп
Aleksey
молекула тоже может поднимать виртуалку
Aleksey
ей пофиг какое окружение
Aleksey
ну так я всё написал
Aleksey
мой вариант именно такой
Aleksey
в плее поставить пременную нужно ли исполнять эту таску
Aleksey
а в роли просто следовать флагу
Aleksey
я придерживаюсь политики что плеи сложные а роли простые
Aleksey
кто то любит иначе
Aleksey
это вопрос монорепы против множества реп и возможности переиспользщовать роли между проектами
Aleksey
я бы сделал это через стратегию
Aleksey
определил бы варианты стратегии и делал include_tasks с указанием стратегии
Aleksey
а сложную логику вынес в туда
Aleksey
defaults:
vmbackup_strategy: machine # can be machine or file. Machine account uses Google service account attached to machine. file renders creds file and removes after backup complete
tasks:
- name: run specific backup job
include_tasks: "service_account_{{ vmbackup_strategy }}.yaml"
Aleksey
тут как видишь нету when
Aleksey
никак
Aleksey
роль ничего не знает про группу
Aleksey
роль работает с переменными
Aleksey
---
- name: Backup Storages
hosts: productions
vars:
some_trigger: true
roles:
- { role: my_role }
....
task: blalla
when: some_trigger
Aleksey
да
Aleksey
еще раз: сложные плеи — простые роли
Aleksey
это моя политика
Aleksey
как хочешь. я не настаиваю
Alexander
А что самое главное, еще недавно это работало.
Alexander
@tnt4brain , не поможешь?
Sergey
Ответил в ЛС.
Ivan
Aleksey
Ivan