我正在尝试运行一个 ansible 的“uri”任务,该任务在“直到”循环中获取状态,直到返回的状态为成功或失败。我的任务如下所示:
- name: Fetching recycle status
uri:
url: "http://{{ restarter }}/status?job_id={{ item }}"
method: GET
body_format: json
headers:
Accept: 'application/json'
return_content: yes
register: restart_status
with_items:
- 14502414
- 14552415
until: (restart_status.results|json_query('[*].json')| json_query('[*][*].status')|flatten) in ['SUCCESS', 'FAILED']
restart_status是一个包含返回的 json 有效负载的变量,它看起来像这样:
{
"changed": false,
"results": [
{
"_ansible_ignore_errors": null,
"item": 14502414,
"json": [
{
"created_date": 1635348569000,
"job": {
"application_name": "testapp",
"id": 14552414,
"user": "gui"
},
"status": "FAILED"
}
],
"vary": "Accept-Encoding"
},
{
"_ansible_ignore_errors": null,
"item": 14552415,
"json": [
{
"created_date": 1635348569000,
"job": {
"application_name": "testapp",
"id": 14502415,
"user": "gui"
},
"status": "FAILED"
}
],
"vary": "Accept-Encoding"
}
]
}
(restart_status.results|json_query('[ ] .json')| json_query('[ ][*].status')|flatten) 的输出是
ok: [localhost] => {
"msg": [
"FAILED",
"FAILED"
]
}
我似乎无法让直到子句起作用。我尝试了多种方法,例如“包含”、“在”、“不在”、==,但没有一个起作用。这是引发的错误。
TASK [Fetching recycle status] **************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The conditional check '(restart_status.results|json_query('[*].json')| json_query('[*][*].status')|flatten) not in ['INIT', 'PROGRESS']' failed. The error was: Unexpected templating type error occurred on ({% if (restart_status.results|json_query('[*].json')| json_query('[*][*].status')|flatten) not in ['INIT', 'PROGRESS'] %} True {% else %} False {% endif %}): 'NoneType' object is not iterable"}
非常感谢任何帮助或指出我做错了什么。