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

