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

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

我想将文件复制到远程节点,但前提是该文件存在。我将其复制到/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}}

我做错了什么? :/

答案1

Ansible 塔用途普鲁特它提供了一个很酷的界面来创建chroot和类似的监狱。在Tower 文档他们指出:

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

当运行读取和写入某些禁止目录中信息的剧本时,用户可能会遇到 PRoot 问题。PRoot在 jailansible-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 = []

答案2

顺便说一句,我在尝试查找角色的“文件”目录中的文件时遇到了类似的问题(不涉及 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

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

答案3

@ralph-bolton solution 建议的另一个 FWIW 解决方案。我的文件位于角色的“文件”文件夹中,并在变量中引用:

vars:
install_root_cert_pem: home-root-ca.crt

最终被找到并正确测试:

local_action: "stat path={{ role_path }}/files/{{ install_root_cert_pem }}"

相关内容