Vladislav 👻
а разве так можно?
Vladislav 👻
https://github.com/ansible/ansible/issues/11175
Vladislav 👻
вижу вот это только, но все равно какая-то странная фича
Vadik
Я вот и спрашиваю просто как бы получил задание дать програмистам путь к playbook они говорять как нам указать путь к ним , я говорю максимум что могу это роли посоздавать а путь ... ) Я просто все из папки с плейбуками выполняю
Anton
Путь к плейбуку - обязательный параметр команды ansible-playbook. Если нужна переменная - пусть будет переменная PLAYBOOK_PATH, и вызывать просто ansible-playbook $PLAYBOOK_PATH
Asgoret
Добрый день, коллеги Кейс: Есть вставляемый конфиг, который имеет собственный стиль (пустые строки, проблемы). Когда делаю include, то правило касательно пробелов соблюдается только для первой строки. Все остальные вставляются от 0 позиции (те вначале) Что ожидаю: data: conf: | # General some data Что получаю: data: conf: | # General some data Что было испробовано: |/|+/|-/""/''/[] Есть идеи?
Артем
conf: |2
Asgoret
conf: |2
не сработало, последующий текст все равно стартует от начала строки
Артем
смотри, вот тестовый плейбук: `--- - name: 'Ololo tasks' hosts: all connection: local gather_facts: no vars: ololo: |2 ololo1 ololo2 tasks: - debug: msg="{{ ololo }}" `
Артем
ох, кривости, извиняюсь)
Артем
короче, для some data добавь пробелы ещё
Asgoret
data: config.json: |- {{ lookup('file', 'files/matrix/riot.json') | indent(4) }}
как отдельный таск сработало... сейчас попробую запихнуть в исходные файл, чтобы не плодить таски, Спасибо!
Alex
Асинхронночка в ансибл огонь)
Asgoret
смотри, вот тестовый плейбук: `--- - name: 'Ololo tasks' hosts: all connection: local gather_facts: no vars: ololo: |2 ololo1 ololo2 tasks: - debug: msg="{{ ololo }}" `
там конфиг на 600+ строчек) его в варс пихать изврат))) да и разрабы хотят динамики
Alex
Неделю юзаю код асинхронный.
Bogdan (SirEdvin)
Эм, асинхронность в ансибл?)
Alex
Эм, асинхронность в ансибл?)
Ага, мало кто знает, мало кто юзает. Даю фидбек, это охренеть как круто
Bogdan (SirEdvin)
А в доку можно ткнуть?)
Alex
Я в метро гугли async ansible
Bogdan (SirEdvin)
Забавно)
Alex
У меня с полпинка завелось, никаких сложностей не возникло.
Timur
unarchive например не поддерживает
Alex
- name: Stop wildfly service: name: wildfly state: stopped register: stop_wildfly async: 120 poll: 0 - name: Waiting until wildfly stopped async_status: jid: "{{ stop_wildfly.ansible_job_id }}" register: job_result until: job_result.finished retries: 15 delay: 15 Вот кусок из плейбука для примера.
Alex
Если нужно остановить десяток другой вайлдфлаев, так он отработает быстрее.
Alex
archive и unarchive имеют баг с экслюдами, поэтому я через шелл написал таск. А мы же понимаем что ждать пока он выполниться нам не обязательно, поэтому выполняем асинхронно, и пока создаётся архив делаем другие таски. - name: Create archive liferay from source zone shell: "tar {% for ex_path in exclude_paths[side_name[:3]] %}--exclude={{ ex_path }} {% endfor %}-c -z -f /tmp/liferay.{{ side_name[:3] }}.{{ ansible_date_time.date }}.tgz liferay" args: chdir: /opt warn: false register: src_archive async: 1800 poll: 0
Alex
дампы бд туда же, старт сервисов, нотификейшены, чистка временных кусочков после работы, установка пакетов. Это уже не маленький список который можно распараллелить и ускорить время выполнения.
Vladislav 👻
Господа, что делать, когда одна роль использует питон2, а другая питон3?
Vladislav 👻
как в одном плейбуке это увязать нормально?
Vladislav 👻
эммм?
Vladislav 👻
и где определять интерпретатор, в роли?
Alex
- name: Unlock remote access to hosts hosts: "all" gather_facts: false vars: python: или как его там tasks: - some_tasks - name: Unlock remote access to hosts hosts: "all" gather_facts: false vars: python: или как его там tasks: - some_tasks
Vladislav 👻
Кажется понял, ща протестирую
Vladislav 👻
при dependencies не работает, сейчас попробую без
Vladislav 👻
все, разобрался, спасибо за наводку 👍
Alexander
Как мне для роли тег пропустить в плейбуке?
Alexander
Куда это?
Andrey
ansible-playbook --skip-tags=SKIP_TAGS ...
Alexander
Я хочу в плейбуке
Andrey
Я хочу в плейбуке
Я бы на вашем месте роль разбил на несколько частей в этом случае...
Vladislav 👻
Я хочу в плейбуке
нельзя так, теги только при запуске плейбуков
Alexander
Ну тогда ладно
Timur
Я хочу в плейбуке
Вы хотите странного
ℭ𝔞𝔯𝔯𝔬𝔩
Я тут хочу странного.... есть кучка var files с частями словаря, как бы их в плейбуке в один лист словарей собрать? Пример: app1.yml app: - name: app1 path: foo app2.yml app: - name: app2 path: bar
ℭ𝔞𝔯𝔯𝔬𝔩
А собрать бы такое: apps: - name: app1 path: foo - name: app2 path: bar
Vadim
А собрать бы такое: apps: - name: app1 path: foo - name: app2 path: bar
https://blog.crisp.se/2016/10/20/maxwenzin/how-to-append-to-lists-in-ansible
ℭ𝔞𝔯𝔯𝔬𝔩
https://blog.crisp.se/2016/10/20/maxwenzin/how-to-append-to-lists-in-ansible
О, спасибо, нагугливал это, но на гитхаб не переходил, а там как раз то что нужно: https://github.com/betrcode/ansible-append-list/blob/master/README.md
Sergey
Я тут хочу странного.... есть кучка var files с частями словаря, как бы их в плейбуке в один лист словарей собрать? Пример: app1.yml app: - name: app1 path: foo app2.yml app: - name: app2 path: bar
Ты действительно странного хочешь. В примере, который ты привёл, ключ верхнего уровня один и тот же, поэтому если мы говорим про автозагрузку ансиблом, то этот ключ будет попросту перезаписан.
ℭ𝔞𝔯𝔯𝔬𝔩
В итоговом списке словарей этого ключа верхнего уровня вовсе быть не должно
Sergey
Ключ верхнего уровня в моём конкретном случае не важен, но так приходится связывать вложенные словари
Очень важен. Если его правильно выбрать, то без приседаний можно список итоговый собрать.
ℭ𝔞𝔯𝔯𝔬𝔩
Очень важен. Если его правильно выбрать, то без приседаний можно список итоговый собрать.
Итак, входные данные: var/app1.yml app: - name: app1 path: foo var/app2.yml app: - name: app2 path: bar И переменная с выбором apps_list: [ app1, app2] я решил свой вопрос вот таким образом: - name: apps | Combine list of apps block: - name: apps | Combine list of apps | Select apps from var files include_vars: name: "{{ item }}" dir: "vars" files_matching: "{{ item }}" extensions: - yml - yaml with_items: - "{{ apps_list }}" when: - apps_list is defined - name: apps | Combine list of apps | Create default 'apps' set_fact: apps: [] - name: apps | Combine list of apps | Add selected to list 'apps' set_fact: apps: "{{ apps }} + {{ vars[ item ].app }}" with_items: - "{{ apps_list }}" when: - apps_list is defined - debug: var: apps
ℭ𝔞𝔯𝔯𝔬𝔩
на выходе в дальнейший плей получаю: apps: - name: app1 path: foo - name: app2 path: bar как и задумывал. PS: может пригодится кому
Alex
Словари мержить по хешам же можно, сыкотно, но для тестов годится
ℭ𝔞𝔯𝔯𝔬𝔩
Словари мержить по хешам же можно, сыкотно, но для тестов годится
мне нжен был не мерж словаря, а объединение списка словарей 🤔
Sergey
мне нжен был не мерж словаря, а объединение списка словарей 🤔
Ну да, ты точно написал, что странного хочешь, вот лучше и не сказать. Вместо декларативности кодишь на ямле. Что ж, твоё право. Я бы так делать не стал - особенно с учётом того количества вспомогательных сущностей, которое такой подход плодит.
Sergey
У роли есть конкретные места для переменных - так же, как и у инвентори. include_vars - это то, что стоило бы обос.... в общем, облить чем-нить и сжечь.
Sergey
Показанный подход лично меня спровоцировал бы на ошибку: словари одинаково называются, плюс имеют одинаковые ключи.
Sergey
А это ой.
ℭ𝔞𝔯𝔯𝔬𝔩
У роли есть конкретные места для переменных - так же, как и у инвентори. include_vars - это то, что стоило бы обос.... в общем, облить чем-нить и сжечь.
механизм include вообще не удобный и не красивый, да но какие есть варианты, если эти переменные не относятся к переменным хоста и переменным плейбука ps: в puppet есть loadyml и loadjson, в salt есть include с логикой на jinja
Sergey
Чтобы от таких ошибок уберечься, я обычно делаю параметризированные роли, которые вот это вот всё ожидают извне, либо имеют минимально разумные дефолтные значения. Да, сложно. Да, будут повторяться вызовы роли с разными параметрами. Но зато декларативность. Тогда к чему именно относятся эти переменные, если они вообще хоть сколько нибудь переменные? Если перестать себе врать и начать назвать их не переменными, а просто списками в рамках роли, то окрываются интересные перспективы 😉 p.s. в ansible есть include_vars и from_json (jinja), да и логику там совершенно отбитую можно запилить, вопрос в другом - а насколько трудоёмкость поддержки это всё окупит?
Timur
Я согласен с Арамисом (c)
Timur
Плодить такую наркоманию ради ввода параметров роли явно избыточно
A
Кто это юзал? Поделитесь впечатлением.. https://github.com/vstconsulting/polemarch
Alex
Кто это юзал? Поделитесь впечатлением.. https://github.com/vstconsulting/polemarch
Мне не зашло, вот скоро буду форман пробовать
A
Мне не зашло, вот скоро буду форман пробовать
А что не так? Хотел просто вечером попробовать развернуть в докере
Alex
Тогда пробуй
Yury
комрады, как в ансибле указать мерж переменных с разных уровней? например в дефолтс один список, на уровне хоста другой. По дефоту тот что с уровня хоста перепишет дефолтс а не смержится
Yury
нашел, похоже мне нужен DEFAULT_HASH_BEHAVIOUR
Sergey
нашел, похоже мне нужен DEFAULT_HASH_BEHAVIOUR
Ты хочешь странного. Не надо так.
Timur
нашел, похоже мне нужен DEFAULT_HASH_BEHAVIOUR
Это лучше не трогать без необходимости