wait_for с ansible не работает

#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. существует ограничение по времени, прежде чем вы сможете принять ответ