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

Ansible使用read_csv后vm.OS条件判断评估失败如何解决?

报错原因

  • 核心问题是loop语句缩进错误:你当前的loop和loop_control参数仅归属到include_tasks: Windows.yml这个任务下,执行第一个include_tasks: Linux.yml任务时,vm循环变量还未被定义,条件判断时找不到变量直接触发报错。
  • 次要问题是CSV内容与判断值不匹配:你的CSV文件中OS列的实际存储值为**Linux**、**Windows**,和判断条件里写的"Linux"、"Windows"值不一致,就算缩进修正后也会出现条件不触发的问题。

修复方案

基础修复(保持原有逻辑)

修正Test_CSV.yml的缩进和判断条件即可:

---
- name: Test_CSV
  hosts: localhost
  gather_facts: True

  tasks:
    - read_csv:
        path: test.csv
        delimiter: ','
      register: servers

    - include_tasks: Linux.yml
      when: vm.OS == "**Linux**"
      loop: "{{ servers.list }}"
      loop_control:
        loop_var: vm

    - include_tasks: Windows.yml
      when: vm.OS == "**Windows**"
      loop: "{{ servers.list }}"
      loop_control:
        loop_var: vm

优化方案(简化代码)

不需要写两个分开的include_tasks任务,直接用过滤器处理OS字段拼接任务文件名,减少重复代码:

---
- name: Test_CSV
  hosts: localhost
  gather_facts: True

  tasks:
    - read_csv:
        path: test.csv
        delimiter: ','
      register: servers

    - include_tasks: "{{ vm.OS | trim('*') }}.yml"
      loop: "{{ servers.list }}"
      loop_control:
        loop_var: vm

trim('*')过滤器会自动去掉OS值前后的*号,直接匹配对应的yml文件名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:54:03