在ansible剧本中运行一个任务,该任务的输出是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时,在输出中不可用快捷键)
答案 0 :(得分:0)
您的第一个when
条件失败,因为根据您在问题中显示的输出,mropt
不是in mydata
。 mydata
是包含单个词典的词典列表,而mropt
是该词典中的键。像下面这样的测试将起作用:
- set_fact:
is_data: "Applicable"
when: "'mropt' in mydata.0.block"
当然,这假设您只对mydata
列表中的第一项感兴趣。
在第二个示例中,您使用的变量output
尚未在任何地方定义,因此无法确定该变量是否有效。