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

时间:2018-10-25 10:37:35

标签: json ansible

在我的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-Expert谁能告诉我我所缺少的东西?!

1 个答案:

答案 0 :(得分:0)

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

modelA