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.
Делал.
Sergey
- name: Include my shit vars include_vars: "{{ item }}.yml" when: item in group_names loop: - copy1 - copy2
- name: do nasty things include_vars: "{{ item ~ '.yml' }}" with_items: "{{ group_names }}" ignore_errors: yes больше грязи :-D
Grek 🇺🇦
Делал.
показывай как
Stepan T.
Уже не покажу. Я тут конвульсивно всё правлю.
Stepan T.
Ща покажу пример.
Grek 🇺🇦
я делаю register после деплоя всех ВМ и потом в лупе добавляю через add hosts
Grek 🇺🇦
Отделение Bereke Bank
Не надо ничего описывать в роли
Отделение Bereke Bank
Ну максимум defaults
Отделение Bereke Bank
где?
Grek 🇺🇦
в ногу выстрелить тебе ник-то не может запретить, но при этом ружья продаются
Stepan T.
и что? как на основании этого add_host должен понять что добавлять?
Можешь показать таск, где ты создаёшь более одной виртуалки и регистрируешь результат? У меня есть ощущение, что я тут неправильно делаю.
Отделение Bereke Bank
нет
Sergey
Ты про объектную модель прочитал?
Grek 🇺🇦
Можешь показать таск, где ты создаёшь более одной виртуалки и регистрируешь результат? У меня есть ощущение, что я тут неправильно делаю.
https://pastebin.com/Zw045eSp только у меня там костыль в виде json_query, но его можно переделать чтоб не ставить лишних пакетов. примеры как это сделать были в чате
Sergey
Ирония? Или ты про роли как раз пропустил, поэтому спрашиваешь то, что спрашиваешь? Так или иначе, роли не должны ничего знать про группы, но зато прекрасно умеют получать параметры.
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
я тред не читал сагрился на только то выражение которое говорю
Отделение Bereke Bank
я тред не читал сагрился на только то выражение которое говорю
ну скажем так. ты смотрел серию Саус Парка где люди ели жопой?
Aleksey
так вот на группу в роли смотреть ненадо. смотри на спец переменную
Aleksey
а ее ставь от группы
Aleksey
группу далее чем в плей тащить не надо. это стремно
Aleksey
не сможешь переиспользовать роль
Aleksey
и только лишь
Aleksey
ну и молекулу задолбаешься писать
Aleksey
не используешь молекулу ?
Aleksey
гори в огне
Vladislav 👻
не сможешь переиспользовать роль
Смогу, просто в роли надо пустую переменную для групп, а на уровне инвентори прописывешь нужную
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
Коллеги, помогите понять, откуда у этой мистики может расти ее корень? Код ``` - name: debug2 debug: msg: "f5_user = {{ f5_user }}" when: f5_user is defined - name: disable host on all its balancers become: no raw: "modify ltm node {{ inventory_hostname | upper }} session user-disabled" delegate_to: "{{ item }}" delegate_facts: True vars: ansible_user: "{{f5_user}}" ansible_ssh_pass: "{{ ansible_become_pass }}" #ansible_ssh_private_key_file: loop: "{{ f5_hosts }}" when: f5_hosts is defined and f5_user is defined ``` производит такой вот вывод ```` build 29-Oct-2020 16:44:30 TASK [debug2] ****************************************************************** build 29-Oct-2020 16:44:30 Thursday 29 October 2020 16:44:30 +0300 (0:00:00.260) 0:03:35.584 ****** build 29-Oct-2020 16:44:31 ok: [host8] => {} build 29-Oct-2020 16:44:31 build 29-Oct-2020 16:44:31 MSG: build 29-Oct-2020 16:44:31 build 29-Oct-2020 16:44:31 f5_user = a_user build 29-Oct-2020 16:44:31 build 29-Oct-2020 16:44:31 TASK [disable host on all its balancers] *************************************** build 29-Oct-2020 16:44:31 Thursday 29 October 2020 16:44:31 +0300 (0:00:00.449) 0:03:36.033 ****** build 29-Oct-2020 16:44:31 fatal: [host8]: FAILED! => {} build 29-Oct-2020 16:44:31 build 29-Oct-2020 16:44:31 MSG: build 29-Oct-2020 16:44:31 build 29-Oct-2020 16:44:31 'f5_user' is undefined build 29-Oct-2020 16:44:31 ``` чот я уже не знаю, в какую сторону копать (
Alexander
А что самое главное, еще недавно это работало.
Alexander
@tnt4brain , не поможешь?
Sergey
Ответил в ЛС.
Aleksey
Трайну ещё раз, вдруг кто знает
чо написал не понятно вовсе
Ivan
чо написал не понятно вовсе
Какое слово непонятно?