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

如何实现Ansible uri模块循环处理目录文件调用PUT API?

解决方法

直接用以下Playbook即可实现需求,核心是正确提取find模块返回的文件属性,结合lookup读取文件内容:

- name: 批量调用Pipeline API
  hosts: localhost
  tasks:
    - name: 查找目标目录下的JSON文件
      ansible.builtin.find:
        paths: /app/pipelines
        patterns: "pipeline-*.json"
        file_type: file
      register: pipeline_files

    - name: 循环发起PUT请求
      ansible.builtin.uri:
        # 用文件名(去掉.json后缀)拼接API路径,根据你的实际接口调整
        url: "https://your-api-domain/api/pipelines/{{ item.basename | regex_replace('\\.json$', '') }}"
        method: PUT
        # 直接读取文件内容作为请求体
        body: "{{ lookup('file', item.path) }}"
        body_format: json
        status_code: 200
        headers:
          Content-Type: application/json
      # 遍历find找到的所有文件
      loop: "{{ pipeline_files.files }}"
      # 避免无匹配文件时执行空循环
      when: pipeline_files.files | length > 0

关键说明

  • find模块返回的pipeline_files.files列表中,每个元素包含path(文件完整路径)和basename(纯文件名,如pipeline-prod.json)两个核心属性,直接调用即可获取你需要的文件名
  • 用regex_replace('\\.json$', '')可以去掉文件名的.json后缀,如果你的API路径不需要后缀可以加上,不需要则直接用item.basename
  • lookup('file', item.path)会直接读取对应文件的原始内容,确保请求体是正确的JSON格式
  • 如果是在远程主机执行,要确保/app/pipelines目录在远程主机上,或者根据实际情况调整delegate_to参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:45:41