Назад | Перейти на главную страницу

Ansible local_action: stat не находит мой файл

Я хочу скопировать файл на удаленные узлы, но только если файл существует. Я скопировал это в /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 = []