【发布时间】:2021-06-03 09:39:33
【问题描述】:
您好,我正在尝试通过 Ansible URI 模块为我的应用程序中的特定 API 端点运行 PUT API 调用,使用包含 json 文件并定义为的字典:
example: { 'example1' : 'v1', 'example2': 'v2''}
- name: Update existing
block:
- name: update existing
uri:
url: "{{url}}/api/{{item.key}}/"
method: PUT
body: "{{ lookup('file', 'example/{{item.key}}/{{item.value}}.json') }}"
status_code: 200
body_format: json
headers:
Content-Type: "application/json"
Authorization: "Token {{ token.json.token }}"
with_dict: "{{ example }}"
register: result
对于 PUT api 调用,如果 {{item.key}} 不存在,此 api 端点将失败,例如if"{{url}}/api/{{item.key}}/" 端点不存在,因此会报 4xx 错误。
鉴于任务失败并且当项目的 api 端点不存在时我收到 4xx 错误,我想为同一个 json 文件运行 POST 命令。
- 如何在 ansible 中执行此操作,以重试失败但仅针对字典中的
{{item.key}}和{{item.value}}的任务?
或
- 有没有更好的方法来使用 POST 命令重试失败的 PUT
我想使用 ansible URI 模块
谢谢!
【问题讨论】:
-
首先,您需要通过在预期状态代码中添加 4xx 或在任务中添加
ignore_errors: true来允许 ansible 继续出错。然后,您可以添加 POST 任务,通过过滤(通过 Jinja 过滤器或when)在失败的任务(错误状态代码或错误,调试result的内容到找到方法) -
嗨 zigma- 你能给我一个示例语法吗?我还会使用字典来指向正确的 json 文件吗?我如何从结果中找到失败的 url,例如结果.url?