Ansible,从 JSON 响应读取值时出错



在我的 Ansible 代码中,我有一个任务,它发出一些请求来检查是否创建了集群。请求的响应是一个 JSON 文件,其中包含值"正常"和"状态"等。

这是我的代码:

- name: Wait for Elastic Cluster to be ready
uri:
url: https://abcdefbla.{{ lookup('env','ENV') }}.some.url.com/api/v1/clusters/elasticsearch/{{elasticClusterDetails.elasticsearchId}}
method: GET
user: admin
password: "{{rootpw.stdout}}"
force_basic_auth: yes
return_content: yes
validate_certs: no
register: result
until: "{{ (result.stdout | from_json | first).healthy }}" == false and "{{ (result.stdout | from_json | first).status }}" == "started"
retries: 60
delay: 10

from_json筛选器有助于解析响应,"first"告诉它应该使用该名称的第一个键。 当我运行它时,出现以下错误:

错误!加载 YAML 时出现语法错误。 没有找到预期的键。 错误似乎出现在"/home/ubuntu/MLAAS-V2_USETHIS/mlaas-v2-aws/mls_ece_core/play.yml"中:第 295 行,第 65 列,但可能 位于文件的其他位置,具体取决于确切的语法问题。 违规行似乎是:

register: result
until: "{{ (result.stdout | from_json | first).healthy }}" == false and "{{ (result.stdout | from_json | first).status }}" == "started"
^ here

我们可能是错的,但这个看起来可能是问题 缺少引号。 始终在模板表达式括号中引用它们 开始一个值。例如:

with_items:
- {{ foo }}

应写为:

with_items:
- "{{ foo }}"

如您所见,我按照建议引用了该行。任何能告诉我我错过了什么的 Ansible 专家?!

我找到了解决方案。URL 对象的间距出错。后来,出现了 JSON 解析的错误,我也修复了该错误。以下代码对我有用:

- name: Wait for Elastic Cluster to be ready
uri:
url: https://abcdefbla.{{ lookup('env','ENV') }}.some.url.com/api/v1/clusters/elasticsearch/{{elasticClusterDetails.elasticsearchId}}
method: GET
user: admin
password: "{{rootpw.stdout}}"
force_basic_auth: yes
return_content: yes
validate_certs: no
register: result
until: resultA.json.healthy == false and "started" == "{{ resultA.json.status|lower }}"
retries: 60
delay: 10

最新更新