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

Ansible playbook循环遍历变量检查文件存在路径错误问题

问题根因
  • stat检测任务的循环配置被注释,任务未遍历实例列表,直接将整个instance_all列表对象插入路径,生成了格式错误的路径/home/test/instance_test/prod/[one, two, tree]/test.php
  • 后续debug任务虽然配置了循环,但注册的result变量仅存储了上述错误路径的单次检测结果,未和每个实例绑定,导致所有存在性判断都基于错误结果输出。
修复后的Playbook
- name: Launch purge script
  hosts: roi-asb-01p
  vars_files:
    - instance_test.yml

  tasks:
    - name: Check if test.php exists per instance
      stat:
        path: "/home/alekso/instance_test/prod/{{ item }}/test.php"
      loop: "{{ instance_all }}"
      register: file_check_result

    - name: Output result for existing files
      debug:
        msg: "实例 {{ item.item }} 下的test.php文件存在"
      loop: "{{ file_check_result.results }}"
      when: item.stat.exists

    - name: Output result for missing files
      debug:
        msg: "实例 {{ item.item }} 下的test.php文件不存在"
      loop: "{{ file_check_result.results }}"
      when: not item.stat.exists
修改说明
  • 放开stat任务的循环配置,路径拼接时使用Ansible循环默认变量{{ item }}指代当前遍历到的单个实例名,每次循环都会生成符合预期的单实例路径,比如/home/alekso/instance_test/prod/one/test.php
  • 带循环的任务注册变量时,所有循环的执行结果会存入变量的results数组中:数组内每个元素对应一次循环的返回值,其中item.item为当次循环的原始遍历值(即实例名),item.stat.exists为当次路径的文件存在性检测结果
  • 后续debug任务遍历file_check_result.results数组,即可匹配每个实例对应的真实检测结果,避免判断错位。

内容的提问来源于stack exchange,提问作者Azrod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 00:12:16