Anna
в плейбуке указать в hosts имя группы хостов из инвентори, запустить плейбук с тегом
Anonymous
у меня просто групп хостов под пару сотен, Сергей спасибо попробую твой способ
Alex
@tnt4brain не сталкивался случайно с моим кейсом относительно много строчного вывода в service status?
Anonymous
Сергей спасибо, оно самое было
Alex
Не-а: я же не императивно пишу. Зачем тебе вызов service status?
не зачем, но так работает модуль. Когда я пишу service: name: XXX state: started то ансибл сначала вызывает status, чтобы понять текущий статус сервиса
Alex
P.S. речь о sysvinit системах
Full
Народ, а как бы указать версию пакета при установке. В смысле, есть список пакетов, например: packages_list: - package1 - package2 Есть примерно такая таска: - name: Install a list of packages apt: name: '{{ packages_list }}' Хочется дополнить возможностью указывать версию пакетов в инвентори для хостов индивидуально. Ввести переменную, например, packages_version: 1.2.3-4, чтоб при наличии этой переменной таска приобретала такой вид: - name: Install a list of packages apt: name: - package1=1.2.3-4 - package2=1.2.3-4 Немного путано объяснил.
Full
фильтр default че уж
Можно пример? Я знаю про него, но как его напялить на список?
Full
Можно, конечно, дополнить таску loop'ом, и тогда с каждым отдельным элементом все получится. Но там ублюдочные кросс-зависимости между этими пакетами, их лучше прям списком передавать в модуль.
Full
Эм. Это сработает с переменной типа list?
Full
Я пока не понимаю, почему это вообще может сработать. Кто итерироваться по списку будет в этом примере.
Gleb
может все же не надо?
Full
Я б не стал.
Gleb
я бы про apt pinning вообще подумал
Gleb
если указана версия то делать пин
Full
если указана версия то делать пин
Хм, это вариант. Голосую за него пока что. Так то я думал их просто на холд ставить.
A
Добрый день. В плейбуке есть таска, которая выполняет на хосте команду в шелле. После грепов и авк вывод представляет из себя две строки: something1 something2 Как сохранить их в отдельные переменные для использования в следующих тасках? upd.: Вообще может быть больше 2-х строк, но мне нужны первые две
Full
Придется поддерживать другой список, потом третий, потом пятый. Так у меня хосте будет просто номер версии. Номер поменял, плей проиграл - пакеты обновились.
A
Можно через set_fact положить их в переменные
Спасибо. А если мне нужно ещё строку разбить на две переменные? Например, буквы в одну, цифру в другую
Full
Да какая телепатия, ты о чем? Ещё раз - номер версии хранится в инвентори, хост варс. Нужно только прицепить его к каждому элементу списка.
Антон
Спасибо. А если мне нужно ещё строку разбить на две переменные? Например, буквы в одну, цифру в другую
Можно либо делать split по предпоследнему символу и получить массив из двух элементов, либо replace всех цифр/букв и получить 2 строки
Full
А если понадобится к определённому пакету другую версию? :)
В моем случае это исключено. Они должны быть одной версии.
Lamobot
В моем случае это исключено. Они должны быть одной версии.
Ну тогда используйте jinja - product фильтр https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#product-filters
Full
О, прям очень близко, спасибо, пошел пробовать.
Full
Фак: jinja2.exceptions.TemplateAssertionError: no filter named 'product' Name: Jinja2 Version: 2.11.2
Full
И в доке jinja, что странно, не нахожу этого фильтра.
Full
Python 3.6.8 Таски нет, это просто рендер jinja-темплейта.
Lamobot
Не все фильтры, что есть в ансибле, есть в jinja. Отлично работает: - debug: msg: '{{ packages_list|product([ package_version ])|map("join","=")|list }}'
Full
Хм. Т.е. это не jinja-фильтр, получается. Ок, пошел так проверю.
Full
Прям оно, спасибо.
Full
Не все фильтры, что есть в ансибле, есть в jinja. Отлично работает: - debug: msg: '{{ packages_list|product([ package_version ])|map("join","=")|list }}'
Финальный вариант: - debug: msg: '{{ packages_list if (packages_version is undefined) else (packages_list | product([ packages_version ]) | map("join","=") | list) }}'
Evgenii
Скажите, как я могу выполнить несколько shell команд за одну таску, но с тем условием, что если хотя бы одна из них будет failed, то все остальные не применяются?
Denis 災 nobody
/bin/aaa && /bin/bbb ?
Nicolai
rm some-file && echo " delete Ok " || echo "delete Fail "
Evgenii
так нельзя
Получается из 10 команд (настройка например чего либо) нужно под каждую заводить отдельную таску и проверять rc ?
Alex
Получается из 10 команд (настройка например чего либо) нужно под каждую заводить отдельную таску и проверять rc ?
только откат в любом случае придется в ручном режиме делать, ансибл не про это
Denis 災 nobody
как минимум можно вынести в скрипт и сделать set -xe
Denis 災 nobody
но оно всегда будет changed:True
Denis 災 nobody
так нельзя
можно упаковать несколько команд в 1 строку
Denis 災 nobody
если нужен откат то пилить модуль
Evgenii
как минимум можно вынести в скрипт и сделать set -xe
не, скрипт не нужен, только выполнение по очереди. Тут основой предпосыл в том, что бы настраиваемый объект не был [недо]настроен наполовину [не]правильно
Evgenii
а разве ансибл не умеет rollback ?
Denis 災 nobody
для sh нет
Denis 災 nobody
shell/command не поддерживают откат
Evgenii
shell/command не поддерживают откат
а можно ссылку почитать про rollback (что можно)?
Alex
поэтому я и сказал, что откаты придется пилить в ручном режиме
Denis 災 nobody
https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_general.html
Alex
ну либо колхозить в стиле shell: | yum install pkg1-1 || yum install pkg1
Denis 災 nobody
тут реализуется откат
Evgenii
Спасибо, буду изучать этот вопрос
Denis 災 nobody
а можно ссылку почитать про rollback (что можно)?
у шелл - ничего. Вот как откатишь mkdir -p /var/lib/aaa/bbb? Удалить только bbb? А создался ешё и aaa. Или сразу весь /var грохнуть? Или как откатить echo 'test' > /etc/fstab?
Evgenii
у шелл - ничего. Вот как откатишь mkdir -p /var/lib/aaa/bbb? Удалить только bbb? А создался ешё и aaa. Или сразу весь /var грохнуть? Или как откатить echo 'test' > /etc/fstab?
Я понял про что ты. Я подразумевал, что может есть некий built-in модуль который следит за изменениями (что то например в кеш копирует, файлы, директории) и если что оттуда восстанавливает, но как оказывается это мои домыслы, не боолее
Denis 災 nobody
а вообще, если есть шанс что в процессе что-то сломается и надо откатывать - я бы начал с постановки задачи... может лучше взять докер-кубер-квм..
Evgenii
а вообще, если есть шанс что в процессе что-то сломается и надо откатывать - я бы начал с постановки задачи... может лучше взять докер-кубер-квм..
по сути в моей задаче все ок, это просто я очкую и пытаюсь все предусмотреть, что вероятно, лишнее
Denis 災 nobody
Я понял про что ты. Я подразумевал, что может есть некий built-in модуль который следит за изменениями (что то например в кеш копирует, файлы, директории) и если что оттуда восстанавливает, но как оказывается это мои домыслы, не боолее
то есть тебе нужен снепшот. И при откате - откат снепшота. А если это вебсервер и в это время залили ещё файл? База индексы обновила, а ей дисковые файлы откатили. Тут вообще чревато.
Denis 災 nobody
по сути в моей задаче все ок, это просто я очкую и пытаюсь все предусмотреть, что вероятно, лишнее
пиши буки так, чтобы не законченный деплой не был критичен. И шелла по минимуму, большинство модулей таки умеют в откат.
Evgenii
Понятно, тут шелл и так как крайний случай
Denis 災 nobody
у модуля file тоже нет отката, если что ;)
да, сложно откатить state:absent )
Alex
> большинство модулей таки умеют в откат. можно примеры откатов для uri, file, lineinfile, copy, template, service ?
Denis 災 nobody
для template помнится оно удалит шаблон. Впрочем, я же сказал большинство а не все, эти - меньшинство.
Denis 災 nobody
там ещё и работу с базами не откатишь
Denis 災 nobody
и повторюсь, иногда стоит начать с постановки задачи.
k
А поделитесь Задача: Дать разработчикам ручки для запуск нескольких плейбуков Кто чем/как решает, какие впечатления?
Андрей
jenkins вообще идеальный инструмент для всего
k
Jenkins/rundeck как вариант
А rundeck вы используете? Как там с chatops-плагинами, удобно параметризованную задачу запускать из какого-нибудь slack-а?
Андрей
Еще есть AWX и если есть бабки, то Tower
Alex
Еще есть AWX и если есть бабки, то Tower
для запуска пары плейбуков - оверкил, имхо