You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:15:31