Timur
А roles где?
Basil
в корне
Timur
Если в папке с плейбукой, то ансибл это тоже считывает автоматически
Basil
Если в папке с плейбукой, то ансибл это тоже считывает автоматически
Мы говорим немного о разных вещах как мне кажется
Basil
{{ role_path }} внутри первой роли будет /path/to/ansible/roles/role1 {{ role_path }} внутри второй роли будет /path/to/ansible/roles/role2 я спрашиваю как сделать, чтобы при вызове role2 из role1 переменная {{ role_path }} внутри второй роли содержала путь к первой
Timur
Зачем вызывать из одной включаемой роли другую?
Timur
Это похоже на жесткий антипаттерн
Stefan
добрый вечер, подскажите плиз функцию, через которую можно добавить разделитель(слово, слово), что-то не понимаю как правильно загуглить, split не для этого как понял {%- for core_domains in bar_sites -%} {{ core_domains.domain_name | разделитель с добавлением запятой }} {%- endfor -%}
Stefan
типа так? {{ ansible_nodename.split('.') | join('_') }} из host.example.com получаем host_example_com
не, у меня есть такое: bar_sites: - domain_name: 'lalala.com' additional_domain_name: 'tatata.com' www_alias: true - domain_name: 'bababa.com' additional_domain_name: 'hohoho.com' www_alias: false просто хочу чтоб когда пройдется цикл, он добавил таким образом: lalala.com, bababa.com то есть просто добавить запятую между полученными значениями переменных
Отделение Bereke Bank
{%- for core_domains in bar_sites -%} {{ core_domains.domain_name }}, {%- endfor -%}
Отделение Bereke Bank
если у последнего элемента запятая не нужна {%- for core_domains in bar_sites -%} {{ core_domains.domain_name }}{% if not loop.last %},{% endif %} {%- endfor -%}
Отделение Bereke Bank
или тебе в одну строку надо?
Stefan
или тебе в одну строку надо?
у меня будет около 3 циклов и все полученные значения должны быть через запятую и в одной строке
Sergey
у меня будет около 3 циклов и все полученные значения должны быть через запятую и в одной строке
"около 3" - это π, или e, или ты предлагаешь погадать, что тебе нужно сделать? как вообще звучит исходная задача?
Stefan
"около 3" - это π, или e, или ты предлагаешь погадать, что тебе нужно сделать? как вообще звучит исходная задача?
bar_sites: - domain_name: 'lalala.com' - domain_name: 'bababa.com' нужно чтоб при подстановке значений в цикле: {%- for core_domains in bar_sites -%} {{ core_domains.domain_name }} {%- endfor -%} доменные имена были через запятую на выходе: lalala.com, bababa.com при использовании |join(', ') у меня такое получается: l, a, l, a, l, a, ., c, o, mb, a, b, a, b, a, ., c, o, m а без - просто доменные имена без пробелов, слипшиеся
Отделение Bereke Bank
- name: Set fact set_fact: blah: "{{ bar_sites | map(attribute='domain_name') | join(',') }}"
Gregory
Ку всем! у меня такой кейс, в host_vars положил файлики с конфигами эластика, конфиги разные и именуются они как server-01.yaml, server-02.yaml итд, теперь вопрос, как в один присет скопировать эти конфиги на нужные машинки? (машинки в инвентори так же указаны как server-01,server-02 итд)
Андрей
модулем template?
Gregory
это то понятно =) но придется хардкодить типа
Gregory
-name copy config to server-01
Gregory
-name copy config to server-02
Gregory
итд
Gregory
а можно ли как нить 1 таском?
Gregory
и как?)))
Sergey
Как обычно - указываешь группу хостов в hosts, в таске используешь подходящую переменную (предположительно, тебе зайдёт inventory_hostname). Но всё-таки лучше сначала прочти доку: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables
Gregory
Огромное спасибо!
Sergey
Пожалуйста.
Gregory
нашел более простой метод через переменную inventory_hostname
Gregory
- name: Copying the config file to remote machine copy: src: "{{ inventory_hostname }}.yml" dest: /etc/elasticsearch/elasticsearch.yml
Timur
hostvars['anotherhostname']['myvariable']
Timur
И т.п.
Timur
Ключ словаря - имя хоста из инвентаря
Maxim
Спасибо, сейчас попробую, а если мне надо перебрать все машинки, то цикл делаю?
Sergey
Спасибо, сейчас попробую, а если мне надо перебрать все машинки, то цикл делаю?
Нет. Декларативность же. https://t.me/pro_ansible/142187 - правильно. Для каждого хоста будет подставлено его имя.
Dmitry
В плейбуке есть include_role ... when: "'xxxx' in group_names" ... как в этой роли получить хосты на которых она будет играться? ansible_play_batch дает все хосты плейбука... есть ли готовая переменная?
Timur
В плейбуке есть include_role ... when: "'xxxx' in group_names" ... как в этой роли получить хосты на которых она будет играться? ansible_play_batch дает все хосты плейбука... есть ли готовая переменная?
Это хобби такое? Делать явно антипаттерновый код, создающий лишние проблемы, а потом удивляться, что нет готовых решений для этих проблем
Timur
when: "'xxxx' in group_names" - сразу красный флаг
Timur
обосновать сможешь?
Что именно обосновать? Что в ансибле не нужно проверять членство хоста в группе дополнительной логикой?
Timur
Так это очевидно, т.к. вместо этого есть встроенный механизм плеев
Timur
Кодить лишнюю логику вместо готового работающего дефолтного механизма - заведомо неразумно
Dennis
Как раз таки инженерная.
k
Господа, просто поинтересуюсь, а кто как решает вопрос резервирования тестовых стендов? Когда есть фиксированное число тестовых окружений и надо как-то разделять их между коллегами, чтобы в один и тот же втроём не деплоили.
Dmitry
Господа, просто поинтересуюсь, а кто как решает вопрос резервирования тестовых стендов? Когда есть фиксированное число тестовых окружений и надо как-то разделять их между коллегами, чтобы в один и тот же втроём не деплоили.
сделали побольше стендов и выдали их каждой команде... а команда уже в состоянии внутри себя разобраться для тех, кто не в состоянии - право деплоя у отдельных лиц хотя сейчас работаем над поднятием тестового стенда по запросу
k
сделали побольше стендов и выдали их каждой команде... а команда уже в состоянии внутри себя разобраться для тех, кто не в состоянии - право деплоя у отдельных лиц хотя сейчас работаем над поднятием тестового стенда по запросу
Вот у меня и побольше не поднять, и сами коллеги хотят "нормальное" решение, а не, скажем, шареный гугл-документ В GitLab оно из коробки окружениями решается, но у нас и не GitLab(
Dmitry
Как раз таки инженерная.
инженерная использует инженерные аргументы - в каком случае какая проблема вылезет, а "заведомо неразумно", "красный флаг", "лишние проблемы" - это менеджерские аргументы, особенно не вдаваясь в контекст... инженер вообще поостережется махать шашкой не зная всего контекста
Dmitry
Вот у меня и побольше не поднять, и сами коллеги хотят "нормальное" решение, а не, скажем, шареный гугл-документ В GitLab оно из коробки окружениями решается, но у нас и не GitLab(
я бы сел и написал бота с очередью... ну и интегрировал с хуками гита, что бы деплоил только нужный разраб... хотя может и это не понадобится, все же нагло вредить коллегам никто не будет
Dmitry
у нас такой бот делоем на прод управляет, просто очередь в слаке
Timur
Тимур. Ты злой 😡
Я добрый как раз :)
Dmitry
вот не вижу причин я пилить десяток плейбуков вместо одного хорошо читаемого, что бы просто кого-то не рвало на флаги... и пока вы ни одной не привели причины
Alex
Таки и не надо 10 пилить. Вложенные группы давно уж как завезли
Timur
Таки и не надо 10 пилить. Вложенные группы давно уж как завезли
Человек, видимо, путает понятия "плей" и "плейбук"
Timur
Или думает, что в плейбуке может быть только один плей
Dmitry
Или думает, что в плейбуке может быть только один плей
ну допустим много.. но что мне это даст кроме множетсва дополнительных строчек текста? Плюсы то какие, кроме "так не делают"
Timur
ну допустим много.. но что мне это даст кроме множетсва дополнительных строчек текста? Плюсы то какие, кроме "так не делают"
У меня сейчас нет сил на проповеди и убеждения. Хотите решить проблему - опишите ее внятно. Только исходную задачу, а не свой способ ее решения. Тогда попробуем подсказать что-то
Timur
А учить как ловко прыгать по граблям, как можно дольше не получая ими по лбу, нет никакого желания сейчас
Dmitry
задача простая - много групп, много ролей, прямое соответствие группа-роль, играются все всегда вместе и в одном порядке и установка/сняние лока в начале/конце и на fail в том числе... хотя не, локи снес уже, возможно эта пачка инклудов с тех времен осталась, но не вижу причин переделывать
Dmitry
да нет проблем... просто для красоты в начале каждой роли вывожу {{ ansible_play_batch | join(', ') }}
Dmitry
и хотелось, что бы выводились не все хосты, а по которым играем
Timur
Вы не знаете, на каких хостах вы запускаете свой код?