Ansible使用uri模块GET请求Azure资源创建状态报错如何解决
问题解决方案
错误根源
- 第一类低级错误:变量名拼写不一致,你代码中
register定义的变量是new_re_result,但报错日志里的判断条件出现了new_pe_result.json.status,先确认是否手动输入时打错了变量名。 - 第二类结构判断缺失:轮询前几次请求时,Azure异步接口可能还未返回完整的带
status字段的JSON结构,直接访问new_re_result.json.status会因为层级属性不存在抛出异常。
修复方案
1. 优化条件判断,增加属性存在性校验
在until条件中先逐层判断属性是否存在,再做值对比,同时给uri模块增加明确的JSON解析配置,修改后的完整代码如下:
- name: fetch the result of the resource creation command uri: url: "{{ new_re.azure_asyncoperation }}" method: GET status_code: 200 headers: Authorization: "Bearer {{ token }}" return_content: yes body_format: json register: new_re_result until: > new_re_result.json is defined and new_re_result.json.status is defined and new_re_result.json.status == "Succeeded" delay: "{{ var_delay }}" retries: "{{ var_retries }}"
2. 额外排查方案
如果修改后仍报错,可在该任务前临时加一个调试任务打印完整响应结构,确认实际返回的字段路径:
- name: debug response structure uri: url: "{{ new_re.azure_asyncoperation }}" method: GET headers: Authorization: "Bearer {{ token }}" register: debug_resp - debug: var: debug_resp
部分Azure异步接口的状态字段可能不是根路径下的status,而是嵌套在properties下的provisioningState,可根据实际返回的结构调整until里的字段路径即可。
内容的提问来源于stack exchange,提问作者MoonHorse
相关产品推荐
相关产品推荐

