我在ansible playbook中运行任务并且该任务的输出是Json。从那个输出我需要找到mropt及其值并将其注册到单独的变量
- debug:
msg: " {{ mydata}}"
register: output
输出:
“msg”:“[{u'Rex':{u'2012':{u'Applied':u'20120118'}},u'block':{u'mropt':u'yes'}}]”
我试过以下
- set_fact:
is_data: "Applicable"
when: "'mropt' in mydata"
上面的命令不起作用,所以试图进行调试,看看我是否得到了结果
- debug:
msg: "is data available {{ output}}"
when: "'mropt' in output"
with_items: output.results
预期结果将是:
当'mropt'值为Yes时,is_data应设置为适用,当'mropt'键不可用时,is_data应设置为No。 (当值设置为no时,mropt键在输出中不可用)
你的第一个when
条件失败,因为根据你在问题中显示的输出,mropt
不是in mydata
。 mydata
是包含单个字典的字典列表,而mropt
是该字典中的关键字。像下面这样的测试可行:
- set_fact:
is_data: "Applicable"
when: "'mropt' in mydata.0.block"
当然,这假定您只对mydata
列表中的第一项感兴趣。
在你的第二个例子中,你正在使用一个你没有在任何地方定义的变量output
,因此不可能判断它是否有效。