如何在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
相关产品推荐
相关产品推荐

