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

如何在GitLab YAML中从API响应提取JSON数组的version值?

问题:从Ansible URI模块返回结果中提取version字段

问题背景

我在GitLab的YAML playbook中使用URI模块调用API,相关代码片段如下:

- name: Get Deployable Devices info
  uri:
    url: "https://X.X.X.X/api/fmc_config/v1/domain/e2743ec-e0f2-11e3-8169-6d9ed49b625f/deployment/deployabledevices?groupDependency=false&limit=1"
    method: GET
    headers:
      X-auth-access-token: "{{ auth_token }}"
      Content-Type: "application/json"
    validate_certs: no
    return_content: yes
  register: versiontimestamp_response

执行后,versiontimestamp_response的返回结构如下:

"versiontimestamp_response": {
        "items": [
            {
                "name": "fw-itftd-ha", 
                "type": "DeployableDevice", 
                "version": "1692981949723"
            }
        ], 
        "links": {
            "self": "https://X.X.X.X/api/fmc_config/v1/domain/e276abec-e0f2-11e3-8169-6d9ed49b625f/deployment/deployabledevices?offset=0&limit=1&groupDependency=false"
        }, 
        "paging": {
            "count": 1, 
            "limit": 1, 
            "offset": 0, 
            "pages": 1
        }
    }

我尝试用以下方式提取version值但失败了:

- name: Extract version number
  set_fact:
    version_number: "{{ versiontimestamp_response.content.items[0].version }}"

解决方法

问题出在versiontimestamp_response.content是字符串格式的JSON,不是已经解析好的字典结构,直接访问.items会报错。有两种可行的解决方式:

方式1:让URI模块自动解析JSON

去掉return_content: yes,添加status_code参数(指定接口正常返回的状态码,比如200),此时模块会自动将返回的JSON解析为字典,存储在versiontimestamp_response.json中。

修改后的URI任务:

- name: Get Deployable Devices info
  uri:
    url: "https://X.X.X.X/api/fmc_config/v1/domain/e2743ec-e0f2-11e3-8169-6d9ed49b625f/deployment/deployabledevices?groupDependency=false&limit=1"
    method: GET
    headers:
      X-auth-access-token: "{{ auth_token }}"
      Content-Type: "application/json"
    validate_certs: no
    status_code: 200
  register: versiontimestamp_response

提取version值的任务:

- name: Extract version number
  set_fact:
    version_number: "{{ versiontimestamp_response.json.items[0].version }}"

方式2:手动解析content字符串

如果必须保留return_content: yes,可以用from_json过滤器将字符串格式的JSON转成字典:

- name: Extract version number
  set_fact:
    version_number: "{{ (versiontimestamp_response.content | from_json).items[0].version }}"

验证提取结果

可以添加一个debug任务确认提取是否成功:

- name: Debug version number
  debug:
    var: version_number

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:35:06