Sergey
Дык ls > filelist, а потом его в таск - не? Или если имена неважны - в .tar.gz.
Vladislav 👻
файлы локальные, которые лежат в папке files в роли
Sergey
Ну в общем звёздочку копировать - такая себе модель.
Aleksei
файлы локальные, которые лежат в папке files в роли
https://stackoverflow.com/questions/38572437/ansible-using-regular-expression-in-the-module-copy
Vladislav 👻
а все, понял, это отдельный модуль
Timur
Самый тру способ - это find с нужным паттерном, а потом по полученному списку делается луп с модулем copy
Timur
Если что-то совсем навороченное и большое, то synchronize
Timur
Если просто директорию целиком, то модуль copy это и сам умеет
Sergey
Сергей пропагандирует башсибл? 😱
Перечитай мой пост ещё раз. Ты описал ровно то же, что и я.
Timur
Перечитай мой пост ещё раз. Ты описал ровно то же, что и я.
Ну, я родными средствами ансибла предлагаю делать
Sergey
Потому что твой деплой начинает деплоить абы что, а не только то, что в нём написано.
Dok
Адский скрипт
Dok
ls в for, чтоб потом проверить правильность и записать с файлик
Александр
ls в for, чтоб потом проверить правильность и записать с файлик
Правильность чего? Там вся суть в разделителях.
Dok
Я про test. И for может и без ls
Александр
Так удобнее. Можно потом туда списком конкретные имена файлов засунуть.
Andrey
Делаете ли вы роли в роли?
Делаем версии ролей: role_name/role_version - в плейбук подключаем конкретную версию. Внутри роль может импортировать yml файлы с тасками с отдельными тегами. но эти теги role_name тоже в себя включают. В итоге можно переключаться между версиями ролей и можно внутри роли вызывать только часть задач, при необходимости.
Timur
Зачем пытаться сделать из роли аналог гитовой репы?
Danis
Вопрос. Есть dict вида: { b1: [v0, v1, v2, v3], b2: [v4, v5] } Все, что есть в этом дикте, сформировано предыдущими тасками и я не знаю настоящее название b 'эшок и v'эшок. Как мне для каждой b проитерировать v'эшки из соотв списка?
Timur
Там в galaxy помойка обычно.
ansible-galaxy может из любой репы тянуть
Timur
С любого гита
Andrey
Зачем пытаться сделать из роли аналог гитовой репы?
Потому что разные хосты/проекты в один момент времени могут жить на разной версии роли.
Timur
Выкачиваете нужные версии ролей с помощью galaxy и ставите
Timur
А вы пытаетесь контроль версий в роли засунуть
Timur
Не надо так
Danis
keys()
Спасибо, а можно чуть подробнее?
Александр
Спасибо, а можно чуть подробнее?
keys -ключи. Словарь характеризуется записями ключ-значение. А значит keys вытаскивает весь список ключей. Другими словами ключи становятся известными когда приезжает словарь
Andrey
Гит и ansible-galaxy для этого есть
Это уже вопрос о вкусах. Лежит и так в git, но да вместо бранчей или тегов, это лежит в разных папках. В вашем варианте будет работать один и тот же плейбук с разными версиями ролей для разных груп хостов? Как он будет между коммитами переключаться?
Danis
👍
Вот только как мне проитерироваться теперь? Ключи есть, а что использовать? subelements вроде как немного по-другому работает.
Timur
Микроскопом при желании тоже гвозди можно забивать, но здравомыслящие люди так не делают
Danis
items[keyname]
Но как мне перебирать значения из списков value?
Danis
with_dict
А как список из value перебирать?
Timur
А что именно нужно делать в процессе перебора?
Danis
А что именно нужно делать в процессе перебора?
Ну вот как в debug например вывести?
Timur
Сами плейбуки и роли называются совершенно одинаково
Timur
Разница только в версии, указанной в requirements
Timur
Ну вот как в debug например вывести?
Ну, в простейшем варианте вызвать инклуд в цикле with_dict, а в тасках из включенного файла сделать простой луп по item.value, в котором будут элементы каждого ключа словаря
Danis
Инклуд например.
Timur
Это гуглится в две секунды
Timur
Ключевые слова: ansible include loop
Andrey
Разница только в версии, указанной в requirements
Одновременно две версии одной и той же роли можно установить?
Timur
В каком смысле одновременно?
Timur
На один хост одновременно две версии одной и той же роли? 😳
Andrey
В каком смысле одновременно?
В плейбук одновременно для разных хостов могут использоваться разные версии ролей (у нас правда все еще несколько сложнее - версия роли задается в group_vars) Ваш вариант это позволяет?
Timur
В плейбук одновременно для разных хостов могут использоваться разные версии ролей (у нас правда все еще несколько сложнее - версия роли задается в group_vars) Ваш вариант это позволяет?
Ну, просто делаете определенный naming convention. В соответствии с ним выкачиваете разные версии роли в папки с разным названием (согласно convention), а потом просто запускаете плейбуку с нужным inventory. И все
Timur
Добавить galaxy в flow чтобы потом переименовывать роли, когда сейчас достаточно git pull....
Вам не надо ничего переименовывать. Просто один раз прописать нужный шаблон в сценарии запуска плейбуки
Timur
И git pull недостаточно в вашем случае. Вам приходится ещё делать крайне сложную структуру роли с лишней логикой
Timur
В итоге версиями вам приходится управлять в двух местах (минимум) вместо одного
Timur
Матчасть тут: https://docs.ansible.com/ansible/2.5/reference_appendices/galaxy.html#installing-roles
Sergey
Хотя это моё личное мнение, разумеется.
Timur
Использование ансибла в качестве гита - это заколачивание гвоздей микроскопом
Timur
При этом без гита обойтись все равно не получается
Sergey
Да. Процесс, видимо, так себе.
Timur
Получается каша из топора
Timur
Сама ситуация, когда на разный набор хостов накатываются разные версии ролей - это как раз не фу, а вполне норм. Особенно, если учитывать перекрестные зависимости
Timur
Просто инструмент для выполнения данной задачи выбран совершенно негодный
Павел П.
Вечер добрый. Задался вопросом защиты от дурака в AWX. Допустим настроен template, инвентори. Хотим запустить его только на одном указанном хосте, логично спрашивать limit, туда указать. А вдруг в лимит ничего не укажем - тогда пойдёт по всему инвентори (или по группе хостов если внутри плейбука ограничить). Так вот, как запускать темплейт в awx, но не выполнять если не указан limit? Ну или подход не тот?)
Anonymous
На этапе выполнения таска