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

如何在Ansible中验证GET请求返回的字段值是否符合预期

Ansible 校验uri模块GET请求返回值操作方法

你用uri模块发请求时开了return_content: yes,接口返回的JSON内容会自动解析到注册变量的json字段下,直接用Ansible自带的assert断言模块做字段校验就行,不需要额外依赖。

实现代码

在你原来的GET请求任务后面,追加断言校验任务即可,完整示例如下:

#
# GET Results
#
- name: 调用接口获取结果
  uri:
    url: "https://getresults.com"
    method: GET
    user: "{{ user }}"
    password: "{{ pass }}"
    status_code:
      - 200
      - 202
    validate_certs: no
    return_content: yes
    headers:
      Content-Type: "application/json"
  ignore_errors: true
  register: new_task_results

- name: 校验返回字段符合预期
  assert:
    that:
      # 校验priority字段值为1
      - new_task_results.json.priority == 1
      # 替换引号内的内容为你预期的id值即可
      - new_task_results.json.id == "xyzg777-2479-4f23-b835-5675e58eef22"
    fail_msg: "返回值校验失败,实际priority值为{{ new_task_results.json.priority | default('不存在') }},实际id值为{{ new_task_results.json.id | default('不存在') }}"
    success_msg: "返回字段校验通过"

补充说明

  • 所有写在that下的判断条件是“与”逻辑,必须全部满足任务才会标记成功,任意一条不匹配就会触发失败,打印你自定义的fail_msg,排查问题很方便
  • 如果要校验嵌套字段,直接按JSON层级取值就行,比如要校验qualityOfService下的intervalSeconds,写new_task_results.json.qualityOfService.intervalSeconds == 800就可以
  • 要是担心接口异常返回导致字段不存在,可以给取值加默认值兜底,比如把priority的判断改成new_task_results.json.priority | default(0) == 1,字段缺失时会用0做比对,直接触发校验失败,不会抛变量未定义的报错
  • 后面的断言任务不要加ignore_errors: true,否则校验不通过也不会中断playbook执行,达不到校验拦截的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:39:15