在我的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谁能告诉我我所缺少的东西?!
答案 0 :(得分:0)
我找到了解决方案。 URL对象的间距有误。后来,出现了JSON解析错误,我也已修复。以下代码对我有用:
modelA