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)
(所以我猜这个故事的寓意是:使用本地文件的完整路径)
Ansible Tower使用PRootchroot
,它为创建类似的监狱提供了一个很酷的界面。在Tower 文档中,他们指出:
3.5. 由于 PRoot 问题,Playbook 无法访问必要的数据
当运行在某些禁止目录中读取和写入信息的 playbook 时,用户可能会遇到 PRoot 问题。
ansible-playbook
PRoot在监狱内运行命令chroot
。在此类情况下,正在运行的 playbook 无法看到磁盘上的其他 playbook 或敏感数据,并且如果 playbook 期望访问该信息,则会出现问题。要微调 PRoot 的使用,可以设置某些变量:Run Code Online (Sandbox Code Playgroud)# 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 = []