Гайрат
with_fileglob?
Sergey
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
George
Придумай метод передать параметр из инвентори в роль так, чтобы его случайно никто не поменял в соседней роли.
Jungo
скажите пож-та а что бы connection: local отработал нужно добавить ключ публичный самому себе?
George
(кроме "хитровывернутого названия с гарантией уникальности").
George
connection:local не использует ssh.
Sergey
Sergey
https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-private-role-vars
Aleksey
Sergey
Grek 🇺🇦
а конект на localhost?
Jungo
а конект на localhost?
- hosts: thinkpad - а в инвентори
thinkpad:
ansible_host: 127.0.0.1
ansible_port: 22
Grek 🇺🇦
сложна...
ходи на localhost
Lamobot
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
Sergey
Указанный флаг в загрузчике вполне себе осмысленное действие делает, кстати - ровно то, что описано.
George
play_vars тут просто для компактности примера. Любые перменные (кроме парамтеров роли и include'ов) перекрываются register/set_fact, причём в рантайме (т.е. set_fact ещё и зависит от `when`). На выходе получается, что когда пишешь проект с большим числом людей и ролей, вместо того, чтобы уютно писать себе свой код в своём кусочке, приходится провялять великую коллективную дисциплину по именованию перменных с прицелом на "не дай бог что-то не перекрыть".
George
И я повторю, что set_fact/register используется не только для последующего when. Это может быть совершенно нормальный код, который в рантайме что-то выясняет (cluster id, подходящую сетку в openstack и т.д.)
Sergey
Sergey
George
В JS есть изоляция, здрасьте. В этом смысле он хоть и фигово типизированный, но язык программирования с областями видимости. Где внутри функции можно написать x=1 и не бояться, что в 100500ой библиотеке сбоку этот 'x' значит что-то другое.
Sergey
Области видимости только внутри функции, если что. А так - глобальный неймспейс.
George
Вообще, последний язык программирования в моей жизни, в котором не было локальных перменных (куда можно было бы что-то записать в райнтайме) - это был basic на ZX-Spectrum.
Aleksey
делать то чо ?
Aleksey
пропоузалы будут :) ?
George
В минимальном виде - резать плейбуки на несколько, и использовать несколько запусков ansible-playbook. Это даёт какую-никакую изоляцию.
В остальном - defensive programming и натуральный лимит роста проэкта. Дорос до какого-то уровня - и дальнейшее развитие становится слишком дорогим. Берёшь и пишешь свой орекстратор/контроллер.
Aleksey
слишком абстрактно. дизлайк отписка
George
Если бы была возможность делать математику в процессе register, возможность модифицировать списки/словари без set_fact, то количество боли было бы меньше.
Sebor▂▅▇█▓▒░
George
Я знаю это. Только ты путаешь причину и следствие.
Sebor▂▅▇█▓▒░
Нет ты (с)
Aleksey
George
Ансибл - не язык программирования, это придумали, чтобы быстро описать возможности ансибла. Т.е. это признание проблем, а не повод для гордости.
Sebor▂▅▇█▓▒░
inqfen
inqfen
Если тебе нужно повычислять/попрограммировать - делаешь для этого модуль
inqfen
А вот логику тасков описываешь без программирования
Sebor▂▅▇█▓▒░
inqfen
Ты имеешь в виду - что ты можешь неявно hostvar перетереть?
George
Разумеется. Ансибл не в коем случае не инвалид, он просто язык программирования с особыми потребностями.
Aleksey
с низким порогом входа скорее
Maksym
ребят, как мне получить с плейбука 'myapp' значение с инвентори? не хост (ansible_host) а именно заголовок группы
Aleksey
и простой кривой обучения
George
inqfen
Но я понял суть - да, в ансибле без проверки так можно соснуть
inqfen
Maksym
Sergey
Sergey
George