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

如何用Ansible JSON Query获取Sabnzbd的Linux src.tar.gz源码包?

用Ansible调用GitHub API获取Sabnzbd的src.tar.gz下载链接

问题分析

你之前的JSON Query写法存在两处关键错误:一是未指向GitHub Release API返回结构中的assets数组(所有可下载文件都存储在此字段);二是匹配逻辑不符合JMESPath语法,错误使用了==和[*]进行模糊匹配,导致无法筛选出目标URL。

修正后的完整Playbook

以下是可以正确获取并下载*-src.tar.gz格式源码包的代码:

---
- name: Install sabnzbd
  hosts: all
  become: true
  gather_facts: false
  tasks:
    - name: Fetch latest release metadata from GitHub
      ansible.builtin.uri:
        url: "https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest"
        return_content: yes
        headers:
          Accept: application/vnd.github.v3+json
      register: github_response

    - name: Extract src.tar.gz download URL
      ansible.builtin.set_fact:
        sabnzbd_src_url: "{{ github_response.json | json_query(query) | first }}"
      vars:
        query: "assets[?ends_with(browser_download_url, '-src.tar.gz')].browser_download_url"

    - name: Download Sabnzbd source tarball
      ansible.builtin.get_url:
        url: "{{ sabnzbd_src_url }}"
        dest: /tmp/
        mode: '0644'
      register: sabnzbd_tarball

    - name: Confirm download result
      ansible.builtin.debug:
        msg: "Sabnzbd source package saved to {{ sabnzbd_tarball.dest }}"

JMESPath(JSON Query)用法解析

这里的核心是用正确的JMESPath语法筛选目标数据:

  • assets:指定要操作的数组字段,定位到所有可下载资产的集合
  • [?ends_with(browser_download_url, '-src.tar.gz')]:筛选数组中browser_download_url字段以-src.tar.gz结尾的元素
  • .browser_download_url:提取筛选后元素的下载URL值
  • | first:由于筛选结果是单元素数组,用first取出字符串格式的URL,直接供get_url模块使用

额外优化说明

  • 添加Accept: application/vnd.github.v3+json请求头,确保GitHub返回标准API格式的数据
  • 显式使用ansible.builtin.前缀指定模块,避免环境中模块别名冲突
  • 设置mode: '0644'保证下载文件的权限合规

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:35:21