Radik
А зачем это делать в таске?
тихо сижу, чат читаю и восхищаюсь твоей выдержкой)
Константин
Господа, реализовываю проект на AWX. Запнулся на 3 шаге... Релизовывал через генерацию новой группы хостов, неполучилось... Может буду идеи куда копать? По идее можно вызвать другой плейбук, с генерированным inventory. Но для этого нужно выдрать private_key из сесси... или я что то не понимаю?
Константин
можно чуть более равернутее прокомметировать?
Timur
Timur
может человек проверяет, что у него малварь есть на группе серверов :)
Не, там разобрались уже в личке. Задачка не для ансибла по сути.
Timur
а в ansible есть аналог dict.get()? А то мне нужно вытащить подсловарь, а переменная может быть не определена и не хотелось бы сваливаться в эксепшн или плодить when'ы
Timur
можно чуть более равернутее прокомметировать?
Что вы хотите сделать? Изначально. Без этого треша с башем
Константин
задача, сделать динамическое добавлени хоста в имеющийся пул гластера.
Константин
чтоб гластер работал, все хосты пула должны быть в hosts на всех хостах.
Константин
Когда я стартую job, я ничего не знаю о пуле, в который я добавляю новый хост.
Константин
Откуда берется информация об имеющемся пуле?
Аксиомы 1. хостнейм всех хостов имеет формат "host0x" x == [1..9]
Timur
Аксиомы 1. хостнейм всех хостов имеет формат "host0x" x == [1..9]
При чем тут аксиомы какие-то? Ансибл информацию об этом откуда берет у вас?
Константин
отрезаем последнйи символ и дальше сиклом с 1 до 9 ищем хосты которые ответят на nslookup
Константин
как бы вы сделали?
Константин
.
Timur
Я бы сделал разворачивание кластера полностью
Timur
Заносим все сервера в инвентарь и накатываем роль
Vlad
Заносим все сервера в инвентарь и накатываем роль
звучит по человечески в отличие от nslookup если не сможет достучаться до сервера, то ансибль пропустит хост
Константин
если у меня 10 изолированных пулов по 5 серверов, это 10 плейбуков, и 10 инвентори файлов ? Я вас правильно понял?
Константин
Я бы сделал разворачивание кластера полностью
есть уже равернутый пул, задача в добавлении ноды... для масштабирования.
Timur
посоветуйте плиз, что почитать по итерациям по сложным структурам данных
Timur
у меня есть нечто в духе: deployments: service1: deployment1: host: somehost deployment2: host: somehost2 service2: ...
Anonymous
посоветуйте плиз, что почитать по итерациям по сложным структурам данных
О, я тоже подожду с вами. Вдруг что-то посоветуют, кроме доки
Timur
и мне нужно уметь как вытащить отдельный деплоймент, так и проитетироваться по всем элементам подмассива
Timur
т.е. пользователь плейбука может указать "service1", а может указать "service1.deployment1" и таск в первом случае должен будет выполниться на всех хостах, тогда как во втором случае будет выбран конкретный хост. в принципе, реализовать это более-менее можно через split и when, но очень уж коряво получается всё. Вдвойне ситуация усложняется, когда нужно проходиться по deployment'ам в определённом порядке. Этот вопрос решил бы массив (- name: deployment1...), но в таком случае для выбора одного deployment'а нужно будет проходить по всему массиву глядя в определённый ключ
Timur
всё это в итоге весьма коряво получается
Константин
Одна роль, одна плейбука, инвентари разные
Спасибо. Пока объяснял повилась идея как сделать.
Timur
и мне уже не нравится :)
Anonymous
коллеги поддерживается ли перменные в notify, наприрмер такой таск - name: enable new app unit systemd: name: "example-{{appname}}" enabled: yes daemon_reload: yes notify: "restart example-{{appname}}"
Timur
всё это в итоге весьма коряво получается
Делайте просто соответствующие группы для разных категорий
Timur
И можете группировать их любым удобным образом
Anonymous
понял где ошибся
Timur
По сути это просто теги
Артём
К вопросу о тегах. Пытаюсь добавить плейбуки, выполняемые только когда это явно нужно, при явно заданной переменной или по тегу, потому что в обычных условиях переменная, которая указывает на группу хостов, не задана. Но ошибка падает в любом случае, даже при явном указании skip-tags. ansible-playbook test_play.yml --skip-tags do_not_import --- # test_play.yml - name: Do not import this import_playbook: do_not_import.yml when: nonexistent_group is defined tags: - never - do_not_import --- # do_not_import.yml - hosts: '{{ nonexistent_group }}' tasks: - name: dbg debug: msg: 'Do not run this' Понятно, что include_playbook не поддерживает when, issue на эту тему есть https://github.com/ansible/ansible/issues/34281 Понятно, что include - статический. Есть ли работающие способы пропустить плей с неопределённым hosts?
Anonymous
Да, поддерживаются
а внутри handlers ?
Timur
а внутри handlers ?
В каком смысле?
Anonymous
--- - name: "restart example-{{appname}}" systemd: name: "example-{{appname}}" state: restarted
Александр
есть у меня list примерно с таким содержанием: mylist: - dir/main.yml - dir/net.yml - dir/fs.yml мне нужен какой-то jinja filter, с помощью которого я могу удалить из list'а по совпадению /main.yml$/
Александр
кстати знаете что общего между бомжом и девопсом?
Max
шутка про контейнеры?
Артём
Вы хотите странного. Зачем импортировать плейбук, который вы не собираетесь исполнять?
Чтобы исполнять его тогда, когда его нужно исполнять. В частности, когда становится понятно, на каких хостах его хочется исполныть.
Александр
кстати знаете что общего между бомжом и девопсом?
ага. И тот и другой копается в контейнерах
Sergey
ага. И тот и другой копается в контейнерах
Вот за это я бы бан влепил на сути: много чатиков этим раком засраны, так нет - ещё и сюда затащили. Тут люди серьёзным башсиблом вопроcы решают, удовлетворяя заказчиков неестественными способами, а ты тут с шутками по тридцать.
Max
щас в честь пятницы еще можно девопсосрач устроить на тему не профессия а половая ориентация
Timur
Sergey
Достаточно шутеек. Остановитесь, пожалуйста.
Alex
сейчас пойдут шутки за 300 :D
Igor
сейчас пойдут шутки за 300 :D
Уже пошли шутки с уценкой, поздно для шуток за 300
Dok
Приветики! Кто-нибудь думал, что у file: state: absent не бывает ошибок в стандартной таске? А может! fatal: [ ipaddr -> localhost]: FAILED! => {"changed": false, "failed": true, "msg": "rmtree failed: [Errno 2] No such file or directory: '/tmp/grafana_src'"}
Dok
- name: Remove junk (local) file: path: /tmp/grafana_src state: absent delegate_to: localhost
Dok
Как такое может быть?)
Anonymous
Интересно
Anonymous
сижу думаю как описать задачу - в общем ансибл статрует шелл на удаленном хосте. Шелл выполняет действие и запускает java процесс. Шел заканчивает свою работу. Ансибл тоже отключается - так как шелл то закончен. но тут начинается самое интересное - через 10 сек запускается вызванный java процесс и выполняет свои действия. И вот их я отследить не могу а так было бы отличано что бы они в ансибл джоб тоже сыпались
Johnny
всем привет, подскажите, можно как-то писать в лог ансибла только PLAY RECAP, а не всего playbook? Гугл к сожалению ответ не дал
Timur
господа, а скрипт dynamic inventory должен выдавать данные в json?
Sergey
господа, а скрипт dynamic inventory должен выдавать данные в json?
всё в доке: https://docs.ansible.com/ansible/latest/dev_guide/developing_inventory.html
Timur
всё в доке: https://docs.ansible.com/ansible/latest/dev_guide/developing_inventory.html
читал эту же страницу, но просто не дошёл до нужного раздела :)
Sergey
читал эту же страницу, но просто не дошёл до нужного раздела :)
https://docs.ansible.com/ansible/latest/dev_guide/developing_inventory.html#inventory-script-conventions
Sergey
то бишь башсибл
vveare138
гайз, тыкаю плейбук для провижена метрик для приложения на ес2, ансибл 2.9.2. Прикрутил модуль docker, указал ему path где лежит докерфайл, но он ругается, что мол по этому пути файла нет. Пробовал и относительный и абсолютный путь указывать, но чет не помогло.
vveare138
- name: build docker image from Dockerfile docker_image: source: build state: present name: prometheus build: path: docker