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
相关产品推荐
相关产品推荐

