Ansible local_action:stat 没有找到我的文件

Ale*_*uck 4 local stat ansible

我想将文件复制到远程节点,但前提是该文件存在。我把它复制到/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
Run Code Online (Sandbox Code Playgroud)

但是 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}}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?:/

小智 5

FWIW,我在尝试在角色的“文件”目录(不涉及 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
Run Code Online (Sandbox Code Playgroud)

(所以我猜这个故事的寓意是:使用本地文件的完整路径)


chi*_*cks 4

Ansible Tower使用PRootchroot ,它为创建类似的监狱提供了一个很酷的界面。在Tower 文档中,他们指出:

3.5. 由于 PRoot 问题,Playbook 无法访问必要的数据

当运行在某些禁止目录中读取和写入信息的 playbook 时,用户可能会遇到 PRoot 问题。ansible-playbookPRoot在监狱内运行命令chroot。在此类情况下,正在运行的 playbook 无法看到磁盘上的其他 playbook 或敏感数据,并且如果 playbook 期望访问该信息,则会出现问题。要微调 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 = []
Run Code Online (Sandbox Code Playgroud)