如何在Ansible控制器存在指定文件时执行Playbook任务?
Ansible控制器本地文件存在性判断的实现方法
在Ansible里,没法直接在when条件里用exists()这类函数判断控制器本地文件是否存在,得先通过stat模块获取文件状态,再基于这个状态做判断。具体实现如下:
- 先用
stat模块检查控制器(localhost)上的目标文件,把结果存为变量 - 在后续任务的
when条件中,结合这个变量和enable_me的条件做判断
修改后的Playbook示例:
- name: 检查控制器上的x.tgz文件是否存在 stat: path: x.tgz register: x_tgz_stat delegate_to: localhost - name: 复制并解压x.tgz到目标主机(仅当控制器存在该文件且enable_me为真时执行) unarchive: src: x.tgz dest: /usr/local/lib/x when: enable_me | bool and x_tgz_stat.stat.exists
补充说明:
delegate_to: localhost指定stat任务在控制器本地执行register: x_tgz_stat将文件状态结果存入变量x_tgz_stat.stat.exists就是判断文件是否存在的条件,和enable_me | bool结合后,只有两个条件都满足才会执行解压任务- 原代码里
when条件的双层大括号{{ }}是多余的,Ansible会自动解析when中的表达式,无需额外包裹
内容的提问来源于stack exchange,提问作者activedecay
相关产品推荐
相关产品推荐

