如何从Ansible文件列表中筛选指定文件名的文件?
筛选指定CSV文件并执行后续任务
步骤1:确认文件列表获取(你已完成的部分)
先确保你的find任务已经正确拿到目录下的文件列表,示例如下:
- name: 获取目标目录下的所有文件 ansible.builtin.find: path: "/你的目标目录路径" file_type: file register: temp_files
步骤2:筛选目标CSV文件对象
你可以用两种Jinja2过滤器方式完成筛选,选一种即可:
方式一:用selectattr过滤器
通过筛选文件对象的filename字段匹配目标值,再取第一个结果(同一目录下同名文件唯一):
- name: 筛选出FileReferences.csv文件对象 set_fact: target_csv: "{{ temp_files.files | selectattr('filename', 'equalto', 'FileReferences.csv') | first | default(None) }}"
default(None)的作用是:如果没找到目标文件,变量会被设为None,避免后续任务报错。
方式二:用json_query过滤器(更简洁)
通过JSONPath语法直接匹配文件名:
- name: 筛选出FileReferences.csv文件对象 set_fact: target_csv: "{{ temp_files.files | json_query('[?filename == `FileReferences.csv`]') | first | default(None) }}"
步骤3:仅当文件存在时执行后续任务
用when条件判断文件是否存在,再执行读取CSV和调用API的任务:
- name: 读取目标CSV文件内容 community.general.read_csv: path: "{{ target_csv.path }}" register: csv_data when: target_csv is not none - name: 遍历CSV数据调用REST API ansible.builtin.uri: url: "https://你的API接口地址" method: POST body: "{{ item | to_json }}" headers: Content-Type: application/json loop: "{{ csv_data.list }}" when: target_csv is not none
内容的提问来源于stack exchange,提问作者jeremywat
相关产品推荐
相关产品推荐

