Я хочу скопировать файл на удаленные узлы, но только если файл существует. Я скопировал это в /tmp/webapps/partner.war
Моя задача:
- local_action: stat path="/tmp/webapps/{{ application }}.war"
register: war
- name: Copy warfile
copy: src=/tmp/webapps/{{ application }}.war dest=/tmp/deploy/{{ stage }}/{{ application }}.war
when: war.stat.exists == true
Но stat всегда говорит мне, что файла не существует. Если я запускаю stat вручную, он показывает, что файл есть.
Результат:
TASK: [deploy | stat path="/tmp/webapps/{{ application }}.war"] ***************
<127.0.0.1> REMOTE_MODULE stat path="/tmp/webapps/partner.war"
<127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367 && echo $HOME/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367']
<127.0.0.1> PUT /tmp/tmpzrV_Ne TO /var/lib/awx/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367/stat
<127.0.0.1> EXEC ['/bin/sh', '-c', u'LANG=C LC_CTYPE=C /usr/bin/python /var/lib/awx/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367/stat; rm -rf /var/lib/awx/.ansible/tmp/ansible-tmp-1433920640.68-144173277081367/ >/dev/null 2>&1']
ok: [example.com -> 127.0.0.1] => {"changed": false, "stat": {"exists": false}}
Что я сделал не так? : /
FWIW, у меня были аналогичные проблемы при попытке найти файлы в каталоге 'files' роли (без участия Tower). Я обычно ссылаюсь на них как на "../files/something", но это не работает для стата local_action. Вместо этого это работает:
- name: check for optional config file
local_action: stat path={{ role_path }}/files/{{ inventory_hostname }}/some_file
register: optional_file
(поэтому я предполагаю, что мораль этой истории такова: используйте полный путь к локальному файлу)
Ансибл Тауэр использует PRoot который предоставляет отличный интерфейс для создания chroot
и подобные тюрьмы. в Документы башни они заявляют:
3.5. У плейбуков отсутствует доступ к необходимым данным из-за проблем с PRoot
При запуске playbook, который считывает и записывает информацию в определенные запрещенные каталоги, пользователи могут столкнуться с проблемами с PRoot. PRoot запускает
ansible-playbook
команда вchroot
тюрьма. В подобных случаях работающая книга воспроизведения не может видеть другие книги воспроизведения или конфиденциальные данные на диске, и если книга воспроизведения ожидает доступа к этой информации, возникнут проблемы. Чтобы точно настроить использование PRoot, можно установить определенные переменные:# Enable proot support for running jobs (playbook runs only). AWX_PROOT_ENABLED = False # Command/path to proot. AWX_PROOT_CMD = 'proot' # Additional paths to hide from jobs using proot. AWX_PROOT_HIDE_PATHS = [] # Additional paths to show for jobs using proot. AWX_PROOT_SHOW_PATHS = []