Timur
Но в данном случае вообще непонятно - зачем нужен async
Boris 🦍
Для этого лучше использовать poll: 0 А контроль результата делать в другой таске модулем async_status
а он определит, что результата никакого не возвращзается, впринципе?
Timur
а он определит, что результата никакого не возвращзается, впринципе?
Ну, он в любом случае проверит статус возврата. Если он будет не тот, что требуется - выдаст fail
Boris 🦍
Ну, он в любом случае проверит статус возврата. Если он будет не тот, что требуется - выдаст fail
прост есть кейс. когда результат не возвращается никакой совсем, т.е если подвис докер контейнер ... запрос и ожидание ответа может висеть очень долго, если не бесконечно..
Timur
В данном случае асинк не нужен. Ретрая с делеем должно хватить и так
Boris 🦍
Там же таймаут есть
круто, сейчас посмотрю
𝚔𝚟𝚊𝚙𝚜
а синтаксис плейбуков с roles: не деприкэйтед еще?
𝚔𝚟𝚊𝚙𝚜
хорошо, ну в пользу import_role и include_role
Vladislav 👻
это две разные сущности
𝚔𝚟𝚊𝚙𝚜
это две разные сущности
ну использование roles: эквивадентно использованию tasks: с import_role
George
Но не инклюд, вероятно ?
inqfen
Нет. С чего вдруг?
Где-то читал тоже, что задепрекейтят
inqfen
Но позже
inqfen
Типа import_role на замену
George
Типа import_role на замену
Я думаю, что это унификация синтаксиса с инклюд плейбук
Boris 🦍
Там же таймаут есть
--- - hosts: - banner10 - banner9 - banner8 become: true gather_facts: false tasks: - name: Cat shell: 'cat /tmp/che' async: 600 poll: 0 register: result - name: Check async_status: jid: '{{ result.ansible_job_id }}' register: job_result until: job_result.rc == 0 retries: 10 ... Таким образом попробовал , вроде работает, насчет безответного таймаута пока не знаю, но должно судя по всему отработать. Пока не воспроизвел
Boris 🦍
т.е это по сути то о чем я говорил, только разделено на разные таски ? и немного другой модуль используется
𝚔𝚟𝚊𝚙𝚜
ну использование roles: эквивадентно использованию tasks: с import_role
а вот я оказывается был не прав, по умолчанию роли в roles: сохраняют переменные для следующего вызовова роли, чего не делает import_role
𝚔𝚟𝚊𝚙𝚜
контролируется через private_role_vars
𝚔𝚟𝚊𝚙𝚜
https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-private-role-vars
𝚔𝚟𝚊𝚙𝚜
Как будто каждый вызывают роли снова и снова в рамках одного плейбука
ну я вызываю роль каждый раз, когда хочу применить новый объект и мне это поведение не нужно
𝚔𝚟𝚊𝚙𝚜
На самом деле я недавно похожую проблему решал, очень мне понравился ksonnet и qbec со своей логикой, когда есть: 1) компоненты 2) параметры 3) environments компоненты - это прототипы объектов которые нужно применить environments - это кластер кубернетиса и неймспейс куда применять компоненты параметры - это переменные которые вычисляются на основе environment и подставляются в компоненты И вот описываешь ты свое приложение таким образом, потом применяешь его в нужный кластер Захотелось реализовать что-то подобное но для ansible, при этом не сильно ломая логику самого ansible, и если с inventory всё понятно то environments и компонентами (объектами которые нужно применить) - не совсем Сначала я все объекты описывал в inventory для конкретного environment, но потом я нашел более простой путь, и вот что получилось: 1) все действия описываются в ролях (с этим всё ок) 2) в инвентори описываются окружения (environments) к примеру я имею хост staging и хост production, каждый имеет свои переменные 3) в плейбуках описываются конкретные объекты которые нужно применить (компоненты) для определенных хостов в идеале я стремился достичь простоты kubectl apply -f my-object.yaml --context stagingв результате получилось: ansible-playbook my-object.yaml -l staging
писал об этом тут
username
Привет всем, не смог найти ответа на вопрос в документации Задача описать localhost в inventory, таким образом чтобы ansible не ломился на него по ssh Согласно докумнтации https://docs.ansible.com/ansible/latest/inventory/implicit_localhost.htm inventory в yaml , должно выглядеть следующим образом hosts: localhost: vars: ansible_connection: local Но почему то ansible всё равно пытается зайти на него по ssh В случае, если localhost ни как не фигурирует в inventory, то всё ок
inqfen
Без gather_facts: no
inqfen
Точнее группа localhost, хост 127.0.0.1 localhost: hosts: 127.0.0.1: vars: ansible_connection: local
username
Без gather_facts: no
Оно всё равноне работает при ansible localhost -m ping Равно как и добавление 127.0.0.1
username
Но все равно спасибо
inqfen
Ну у меня так как я выше написал, пара десятков плейбуков работает
inqfen
Хз влияет ли явное указание inventory не в etc
username
Не влияет
inqfen
𝚔𝚟𝚊𝚙𝚜
Ansible 2.8 добавил новую группу модулей https://github.com/ansible/ansible/blob/stable-2.8/changelogs/CHANGELOG-v2.8.rst#new-modules
𝚔𝚟𝚊𝚙𝚜
Есть нюанс - это изобрели давно
где об этом почитать?
Антон
подскажите , как можно поправить ошибку The offending line appears to be: - include_tasks: install-home-db.yml ^ here в данной роли https://github.com/oravirt/ansible-oracle/blob/master/roles/oraswdb-install/tasks/main.yml#L83 , запускаю на версии ansible 2.8.0
Vladislav 👻
Кавычки
Антон
- include_tasks: "install-home-db.yml" ?
Vladislav 👻
Да
Антон
так тоже не работает и с одинарными так же
Vladislav 👻
Просто ради интереса, переименуй минусы на нижнее подчеркивание
Viktor
Добрый день. Не подскажите в чем может быть проблема? На MacOS пробую в папке с проектом выполнить npm install. Выдает ошибку: "stderr": "env: node: No such file or directory. В плейбуке - command: sh /Users/user/work/npm.sh. В самом sh скрипте - cd "путь к папке с проектом" и npm install. Хотя все это на этом самом маке работало еще две недели назад.
Tadeusz
node'ы нет
Tadeusz
whereis node
Viktor
whereis node не дает ничего. which node возвращает - /usr/local/opt/node@10/bin/node
Sergey
В общем, твой вопрос не имеет отношения к Ansible
Sergey
Беспорядок на машине - это факт
George
+100 к беспорядку
Sergey
Командный интерпретатор не может найти бинарь в PATH, только и всего
Sergei
могу ли я block выполнить в цикле?
Anton
товарищи, подскажите, можно ли обновить list of dicts значениями из такого же но другого, более свежего? есть старый список, в нем словари со значениями и есть новый список, такой же, со словарями, но более новыми значениями и надо их смержить, с учетом значений из нового списка. каким путем луче пойти?
Sergey
могу ли я block выполнить в цикле?
Если я правильно помню, то не можешь.
Sergei
ну это прям печально
Sergei
:D
Anton
а чем странное?
Timur
ну это прям печально
Если нужен цикл по нескольким таскам - можно сделать через include_tasks
Sergey
а чем странное?
Постановкой задачи. Ansible - не Lisp, не Python, и даже не Бейсик.
Anton
понимаю, вероятно это не задача ансибла
Anton
combine c ипользованием loop
Anton
ясно что в loop нужно отдать один из списков, но как корректно отдать ему в combine второй, пока не могу понять
Timur
Дайте пример обоих списков - посмотрим