#ansible #ansible-playbook #ansible-2.x
#ansible #ansible-2.x
Вопрос:
Я использую модуль git от ansible (используя ansible 2.1) для извлечения репозитория, а затем перехода в загруженный репозиторий с помощью модуля оболочки (я могу попробовать команду, если оболочка не работает). У меня есть роль с двумя включениями.файлы yml (один, который извлекается из git, а второй, который использует команду оболочки) — оба находятся в каталоге задач роли. Git clone работает, но даже команда оболочки сразу после этого не работает (похоже, она не может определить, что каталог был создан, хотя я могу перейти в этот каталог, используя другую оболочку). Я пытался использовать wait_for (но он никогда не возвращается). Я использую свой локальный идентификатор пользователя для выполнения всех задач, и репозиторий git создается с моим идентификатором. Есть мысли о том, как это решить:
shell.yml
---
- wait_for: path=/tmp/my-repos/my-proj
- shell: cd /tmp/my-repos/my-proj
main.yml
---
- include: git.yml
- include: shell.yml
git.yml
---
- name: fetching my repo
local_action: git repo={{ my_repo_url }}
dest={{ my_proj_path }}
accept_hostkey=yes
depth=10
version={{ my_project_version }}
Комментарии:
1. проблема заключалась в том, что перед командой оболочки не использовалось local_action — команда выполнялась на удаленном компьютере, а не на компьютере контроллера
Ответ №1:
Это связано с тем, что модуль git локально клонирует репозиторий, а модули ‘shell’ и ‘wait_for’ выполняются на другом хосте (в соответствии с вашим файлом инвентаризации)
Если ваш сборник пьес должен быть полностью воспроизведен на локальном хосте, вы можете:
1) удалите ‘local_action’ в git.yml:
---
- name: fetching my repo
git repo={{ my_repo_url }}
dest={{ my_proj_path }}
accept_hostkey=yes
depth=10
version={{ my_project_version }}
2) вызовите свой playbook с помощью «локального» плагина connector:
ansible-playbook -i "localhost," -c local main.yml
Преимущество: вы можете использовать этот сборник на удаленном хосте, если хотите.
Я не понимаю, зачем вам нужно использовать модуль ‘wait_for’, модуль ‘git’ гарантирует, что репозиторий будет клонирован перед следующей задачей.
Комментарии:
1. спасибо — я опубликовал свой ответ — я запустил команду оболочки, используя local_action (она была запущена на удаленном хосте, даже если клон / репозиторий git находился на компьютере контроллера). это был недосмотр с моей стороны — ценю ваше мнение
Ответ №2:
проблема заключалась в том, что перед командой оболочки не использовалось local_action — команда выполнялась на удаленном компьютере, а не на компьютере контроллера
---
- local_action: shell cd /tmp/my-repos/my-proj
Комментарии:
1. существует ограничение по времени, прежде чем вы сможете принять ответ