Гайрат
with_fileglob?
inqfen
Кстати тоже в выходные проверю, скачал
inqfen
Старый 17 года как-то совсем уже не
George
Не мути воду, записывай role params правильно :-)
1. Ты прав про role params. Они побеждают всё, кроме -e. (и, возможно, переменных для инклюдов - я не проверял). 2. Я потыкался в пачку документов про ансибл, и там ни где нет примеров с role parameters. Прям нигде.
George
Они даже так пишут: You can pass different parameters in each role definition as: --- - hosts: webservers roles: - { role: foo, vars: { message: "first" } } - { role: foo, vars: { message: "second" } }(говорят 'parameters', пишут 'vars').
Aleksey
Крутой плагин?
почти всё тоже самое что было доступно в json schema
Aleksey
подсказки по именам переменных нет
Aleksey
подсказки по обязательным параметрам модулей нет
Aleksey
в целом хорошо что начали, но вот бы не бросили
George
FF... счастье было так близко. Нет, вот так вот нельзя - рекурсия. #comment - role: role2 bar: '{{ bar }}'
George
т.е. для взаимодействия с инвентори всё равно придётся придумывать имена переменных подлиннее и трястись над ними, чтобы случайно не попасть под set_fact.
Sergey
FF... счастье было так близко. Нет, вот так вот нельзя - рекурсия. #comment - role: role2 bar: '{{ bar }}'
:-)))))) Зачем тебе рекурсивные определения? Просто потому, что можешь?...
Aleksey
в целом хорошо что начали, но вот бы не бросили
из того что порадовало. понимает сам что файл "евоный" и меняет пиктограму. есть шансы что сделают норм
Sergey
почти всё тоже самое что было доступно в json schema
Я имел в виду - ты хотел написать чонть крутое. Напиши крутой плагин :-)
George
Придумай метод передать параметр из инвентори в роль так, чтобы его случайно никто не поменял в соседней роли.
Jungo
скажите пож-та а что бы connection: local отработал нужно добавить ключ публичный самому себе?
George
(кроме "хитровывернутого названия с гарантией уникальности").
Aleksey
Я имел в виду - ты хотел написать чонть крутое. Напиши крутой плагин :-)
не не. у меня прозаично. нужно написать еще одну роль установки alertmanager-а
George
connection:local не использует ssh.
Sergey
https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-private-role-vars
Aleksey
Я же ссылко давал: PRIVATE_ROLE_VARS
ага. я тоже не понимаю чо он
Jungo
connection:local не использует ssh.
странно получаю ошибку при этом msg: 'Failed to connect to the host via ssh: Permission denied
Grek 🇺🇦
а конект на localhost?
Jungo
а конект на localhost?
- hosts: thinkpad - а в инвентори thinkpad: ansible_host: 127.0.0.1 ansible_port: 22
Grek 🇺🇦
сложна... ходи на localhost
George
@amarao и чо ты? :-)
Писал контр-пример. Замените play_vars на инвентори или group_vars. cat role1/tasks/main.yaml --- - set_fact: foo: set_fact cat role2/tasks/main.yaml --- - debug: var=bar cat play.yaml --- - hosts: localhost gather_facts: false vars: foo: play_vars roles: - role: role1 - role: role2 bar: '{{ foo }}' cat ansible.cfg [default] PRIVATE_ROLE_VARS=true (для ленивых - в выводе будет 'set_fact')
George
Всё равно, всё, кроме буквальных параметров роли может быть случайно поменяно с помощью set_fact, а значит, нужно использовать defensive naming, и упаси боже вас использовать имя 'ip', или что-то подобное.
Sergey
На 'ip' завязано какое-то ПТСР?
George
Не на ip персонально, но коллизии с невинными перменными у меня были. ip просто ясный и короткий пример.
Sergey
Указанный флаг в загрузчике вполне себе осмысленное действие делает, кстати - ровно то, что описано.
George
play_vars тут просто для компактности примера. Любые перменные (кроме парамтеров роли и include'ов) перекрываются register/set_fact, причём в рантайме (т.е. set_fact ещё и зависит от `when`). На выходе получается, что когда пишешь проект с большим числом людей и ролей, вместо того, чтобы уютно писать себе свой код в своём кусочке, приходится провялять великую коллективную дисциплину по именованию перменных с прицелом на "не дай бог что-то не перекрыть".
Jungo
сложна... ходи на localhost
спасибо! вроде вышло дальше судо - но с ним уже легко
George
И я повторю, что set_fact/register используется не только для последующего when. Это может быть совершенно нормальный код, который в рантайме что-то выясняет (cluster id, подходящую сетку в openstack и т.д.)
George
В JS есть изоляция, здрасьте. В этом смысле он хоть и фигово типизированный, но язык программирования с областями видимости. Где внутри функции можно написать x=1 и не бояться, что в 100500ой библиотеке сбоку этот 'x' значит что-то другое.
Sergey
Области видимости только внутри функции, если что. А так - глобальный неймспейс.
George
Это всё отговорки, чтобы не писать свои модули/плагины/whatever.
Ну вот написал ты свой модуль, и? Вот берёт твой модуль и выставляет факты. А они перекрывают перменную в group_vars, и никто ни сном ни духом, что у тебя коллизия.
George
Области видимости только внутри функции, если что. А так - глобальный неймспейс.
Я не эксперт в JS, но там вообще-то классы есть. Которые как раз локальный state прекрасно и хранят.
George
Вообще, последний язык программирования в моей жизни, в котором не было локальных перменных (куда можно было бы что-то записать в райнтайме) - это был basic на ZX-Spectrum.
Aleksey
делать то чо ?
Aleksey
пропоузалы будут :) ?
George
В минимальном виде - резать плейбуки на несколько, и использовать несколько запусков ansible-playbook. Это даёт какую-никакую изоляцию. В остальном - defensive programming и натуральный лимит роста проэкта. Дорос до какого-то уровня - и дальнейшее развитие становится слишком дорогим. Берёшь и пишешь свой орекстратор/контроллер.
Aleksey
слишком абстрактно. дизлайк отписка
George
Если бы была возможность делать математику в процессе register, возможность модифицировать списки/словари без set_fact, то количество боли было бы меньше.
George
Я знаю это. Только ты путаешь причину и следствие.
Sebor▂▅▇█▓▒░
Нет ты (с)
George
Ансибл - не язык программирования, это придумали, чтобы быстро описать возможности ансибла. Т.е. это признание проблем, а не повод для гордости.
George
математику над левой частью выражения ?
Хотя бы над правой, для начала. - list_regions: name=myregion register: region value: '{{ output.regions[0] }}'
inqfen
Если тебе нужно повычислять/попрограммировать - делаешь для этого модуль
inqfen
А вот логику тасков описываешь без программирования
George
Если тебе нужно повычислять/попрограммировать - делаешь для этого модуль
Окей, я написал модуль. Теперь этот модуль возвращает мне значение. И куда я его должен записать? В переменную, которая перебьёт значение из group_vars для роли, с которой я ничего общего не имею?
inqfen
Ты имеешь в виду - что ты можешь неявно hostvar перетереть?
George
Разумеется. Ансибл не в коем случае не инвалид, он просто язык программирования с особыми потребностями.
Aleksey
с низким порогом входа скорее
Maksym
ребят, как мне получить с плейбука 'myapp' значение с инвентори? не хост (ansible_host) а именно заголовок группы
Aleksey
и простой кривой обучения
George
Ты имеешь в виду - что ты можешь неявно hostvar перетереть?
Примерно так, хотя это не называется hostvars.
inqfen
Примерно так, хотя это не называется hostvars.
В момент выполнения они схлапываются в словать hostvars
George
ребят, как мне получить с плейбука 'myapp' значение с инвентори? не хост (ansible_host) а именно заголовок группы
Ты используешь странные слова. На экране инвентори - группа myapp и хост myapp.mydomain... Что и куда ты хочешь получить?
inqfen
Но я понял суть - да, в ансибле без проверки так можно соснуть
George
В момент выполнения они схлапываются в словать hostvars
Не складываются они. Ты можешь их прочитать через hostvars, но внутри у них там свои структуры. Разные scope и preference.
Maksym
Ты используешь странные слова. На экране инвентори - группа myapp и хост myapp.mydomain... Что и куда ты хочешь получить?
возможно запутно выразился на скрине инвентори, хочу в плейбуке обратиться к группе (получить переменную со строкой myapp)
George
возможно запутно выразился на скрине инвентори, хочу в плейбуке обратиться к группе (получить переменную со строкой myapp)
Ты не можешь обратиться к группе. Ты можешь посмотреть список хостов в группе {{groups[gorupname}} или к переменным хоста {{hostvars[hostname].variable_name }}
Maksym
Ты не можешь обратиться к группе. Ты можешь посмотреть список хостов в группе {{groups[gorupname}} или к переменным хоста {{hostvars[hostname].variable_name }}
т.е. правильно продублировать это значение в переменных группы и уже нормально использовать, так схитрить не выйдет?)
George
т.е. правильно продублировать это значение в переменных группы и уже нормально использовать, так схитрить не выйдет?)
Я не могу сказать "правильно", потому что я не понимаю что ты хочешь, но положить перменные в group vars - это нормально и часто делается. Все хосты в группе будут иметь к ним доступ по имени переменной.