что где-то, на любом хосте горуппы определеная переменная new_node=True, например. Как мне пройтись по списку всех переменных всей группы и определить наличие переменной?
- task: .. when: new_node run_once: yes delegate_to: localhost
Хотя косяк, вроде так не сработает https://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html#running-on-a-single-machine-with-run-once Any conditional (in other words, when:) will use the variables of the ‘first host’ to decide if the task runs or not, no other hosts will be tested.
да. к сожалению, так не отработает
Идемподентность же
не понял, при чем тут идемпотентность и when condition
Имеется ввиду, что операция на локалхосте должна быть идемпотентной. Тогда не нужен when совсем.
ну мне её не имеет смысла выполнять, если этой переменной нет, она задается в процессе некоторых проверок
возможно да. доля правды есть. но тем не менее, как то можно же прочекать переменные и их наличие. на основании этого выполнить таску?)
<that_var> is defined
ну это применительно только для целевого хоста, а я применяю таску на локалхост, у меня так не работает
Ты же про hostvars слышал?
ну да. т.е мне нужно прочекать гроупварс и пройтись по каждому хосту по всем переменным и проверить существует ли она? так?
Ты же всё равно делаешь #странное... Я бы через group_by создал новую группу, куда включил хосты только с данной переменной.
я понимаю, что это может быть странным с точки зорения ансибла и его подхода, но с точки зрения обычного скриптования тут нет же никакого рокетсайнса, элементарная процедура на наличие некоторой переменной и выполнения действия. group_by не использовал, сейчас погуглю
да я понимаю. зачем каждый раз говорить одни и те же вещи) к сождалению, в некоторых реалиях приходится выходить за рамки стандартного
Set_fact с delegate_to 'all'
Lame excuse, bro. Костыли не должны нарушать объектную модель, иначе очень легко выстрелить себе в ногу, а потом хрычевать по чатам - "ансибл не работает", вот это вот всё.
Обсуждают сегодня