George
combine: https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#combining-hashes-dictionaries чтение файла как yaml: https://docs.ansible.com/ansible/latest/plugins/lookup/file.html
Vitaliy
Спасибо
Full
Инвентори генерирует программа.
playbook group_vars/all тогда. Должен перекрываться переменными из инвентори (но не all).
George
playbook group_vars/all тогда. Должен перекрываться переменными из инвентори (но не all).
Это подлая грабля для пользователя плейбуки. somegroup/vars уважается, а all/vars нет. Я видел два одинаково некрасивых решения: роль с дефолтами (roles/defaults/defaults/main.yaml), которую всюду пихают и покакать на DRY - написать одинаковую переменную в defaults у каждой роли.
Aleksey
Гляну, спасибо
я с гиганским удовольствием перестал пользовать blockinfile/lininfile и перешел на эту штуку
George
Угу, но это в доке описано.
Всё равно подлость. Не люблю делать вещи, в которых грабли и wtf by design. И так хватает wtf by accident в жизни.
Full
Воздержусь от комментария в этом чате, а то выгонят... Как вариант, можно нужную переменную в плейбуках обвязать фильтром | default, и где нужно, там и задавать, а так пусть по-умолчанию будет. Или вычисление этого финального значения в /vars перенести.
George
Ну, это всё большие выкрутасы, чем role/defaults. Зачем? Просто повтор defaults это нарушение DRY, а места, где можно было бы один раз написать, нету. Увы.
George
В #ansible-dev в целом все согласны, что такая схема с переменными как сейчас, не самая удачная. Но, уже сделали, т.е. классическое влияние размера лошадиной задницы на размер сопла ракетного двигателя.
Full
> места, где можно было бы один раз написать, нету Ну, как бы есть - инвентори. Просто в твоем случае оно не подходит. Разве что может генератор инвентори можно научить класть переменную в нужное место.
Oleg
а есть в ansible возможность парсить строку? например есть сервис, который пишет свой статус в лог, и необходимо натравить ансибл после запуска сервиса парсить этот лог и ждать ответа.
Oleg
просто в логе сервиса, если статус об успещном запуске уже есть где то ранее, то wait_for сразу говорит об успехе, хотя ему надо ждать запуска сервиса и только последняя строка будет говорит об этом, а не те, что уже ранее в логе есть
Oleg
как вар
Aleksey
Ребят, направьте на верный путь, должен ли CI/CD процесс настраивать инфраструктуру?
Timur
Лучше вот сюда с таким: https://t.me/devops_ru
Aleksey
Непонятно о чем вопрос, но явно не тема для этого чата
Почему же не для этого? Есть конфигурация ansible которая настраивает инфраструктуру. Вопрос к вам, интегрируете ли вы развертывание инфраструктуры в ci/cd процесс?
Aleksey
Ну вот я и прошу помочь выбрать правильное направление, для себя не могу понять, стоит ли оно того.
Timur
Если процессы такого требуют, то да - ансиблом в рамках CI/CD можно и инфраструктуру настраивать
Timur
Но общий вопрос на тему «стоит ли» явно за пределами тематики чата
Timur
Ссылочка на более подходящий чат выше
Aleksey
ладно, спасибо
YuraS
коллеги, можете подсказать по Ansible. В плейбуке есть таска которая тупо копирует директорию. Директория весит 17Мб, кол-во файлов 5к. Выполнение таски занимает минут 10. Плейбук применяется на виртуалку которая крутится на этом же хосте. В чем может быть причина такой длительности в копировании? Это у меня какая-то бага, либо особенность копирования большого кол-ва мелких файлов?
YuraS
по scp?
YuraS
scp скопировал за 3 сек
YuraS
модуль copy
YuraS
Maksim
модуль copy
Может есть смысл архивировать?
YuraS
нужно юзать synchronize модель\
YuraS
Note The “copy” module recursively copy facility does not scale to lots (>hundreds) of files. For alternative, see synchronize module, which is a wrapper around rsync.
Anonymous
При всем уважении mitoget будет шустрей
YuraS
При всем уважении mitoget будет шустрей
Да, увидел статью на Хабре "Ускоряем Ansible с помощью Mitogen"
YuraS
Может есть смысл архивировать?
Тоже так думал но, решил спросить у более опытных, может я что-то не так делаю. Спасибо за помощь)
Антон
Ну вот я и прошу помочь выбрать правильное направление, для себя не могу понять, стоит ли оно того.
На linkmeup.ru поищи в подкастах сисадминсов с Георгом Гаалом - обсуждали
Антон
Вопрос не понятен
Антон
Как минимум в части «динамического формирования этапов»
Pavel
link me up LINK ME UP INSIDE
Pavel
простите.
Антон
возможно я ошибаюсь, но в ответах я читаю агрессию. вы пришли за помощью, но не описали вашу задачу. вы описали проблему в реализации вашего видения решения задачи. а частенько случается что выбранное решение идет в разрез с общепринятыми практиками и идеологией продукта.
Антон
поэтому я бы вас попросил описать кейс, ибо в том формате что вы написали очень похоже что вы пошли просто не в ту степь
Антон
момент первый - если это одно и тоже действие просто с разными переменными - то в чем проблема? ансибл умеет брать переменные откуда угодно. просто готовьте переменные и запускайте плейбук
Антон
момент второй - зачем вам враппер?
Антон
момент третий - мне все равно не понятно как связаны в вашем кейсе динамические шаги и ансибл
Антон
опишите пожалуйста предметно кейс. пока звучит... звучит как #яхочустранного
Антон
есть два варианта: 1. средствами ci тимсити - это никак не относиться к ансиблу 2. сформировать лист из ролей в ансибле - и дальше в loop
Антон
вы можете влиять на формат файла?
Антон
вы можете сделать так, чтобы последовательность ролей вам отдавалась массивом в yaml?
Антон
loop_control это задание имени массива с переменными =)
Антон
если вы можете заранее подготовить файл с шагами и файлы с переменными то дальше вы просто инклудите роли в цикле
Антон
а при условии что лист выполняется последовательно - вы можете таким образом выполнять нужные вам роли в нужной вам последовательности
Антон
- name: VMWare | Base Vm setup include: base_vm_setup.yml loop: - base/vmware/delete_vm/ - base/ipam/remove_ip - base/ipam/new_ip/ - base/ipam/get_ip/ - base/vmware/create_vm/ - base/vmware/management_disk/ - base/secrets/change_password/ delegate_to: localhost tags: - base_vm_setup - never как-то так
Антон
не помню чтобы что-то вам сдавал чтобы говорить о зачтении/не зачтении...
Антон
внутри base_vm_setup.yml
Aleksey
внутри base_vm_setup.yml
если в цикле роли, то не понятно зачем их куда-то передавать, если переменные, то зачем их передавать неявно... инструмент можно использовать по всякому. вы вольны. но странно
Антон
я вам дал два варианта исходя из той информации что из вас удалось вытянуть. оба вам варианта не нравятся без каких-либо объяснений. ну ок, значит вам не нужна помощь
Антон
злиться? XDDDDDDDD поржал. нет, просто когда люди хотят помощи они обычно максимально подробно расписывают кейсы. и тут помогают. в вашем случае... это не так )
Aleksey
я не проверял. скорее всего из инклюда item можно подхватить, хотя в одном плейбуке система сразу не приветствует пары дефолтных переменных. и лично я при вервой же возможности все переназначаю на предметные имена. и ошибки области действия самые заморочные
Aleksey
да тут просто море возможностей. вот на счет рандомности: это нужно, или это вредная ситуация? у меня из практики вредная. у вас так?
Aleksey
роли независимые, в метах нет ссылок?
Aleksey
я правильно понял, что список ролей вам дается сверху и не вами задается порядок?
Aleksey
есть правило сортировки? если да, то надо их ранжировать и вызвать таску уже с правильным списком
Aleksey
да. и надо описать правила сортировки. роли же не могут быть произвольные? это всяко из заранее известного множества. значит куда-то выкладывается приоритезация в каком-то виде. и сначала список скачивается, потом сортируется, потом вызывается. причем сортировку можно сделать внешним скриптом - он всяко без changed
Aleksey
параметры в том же файле-задании? это yaml?
Sergey
Та система, которая формирует этот файл, и пишет тутда нормальный плейбук.
Aleksey
вот тут по порядку. что в динамическом файле. только имена ролей
Aleksey
Та система, которая формирует этот файл, и пишет тутда нормальный плейбук.
ну, точнее "формальный" плейбук. но там нет гарантии правильно порядка, как я понял