需要过滤一个字符串及其从ansible输出中得到的值

时间:2019-04-21 15:46:31

标签: ansible

在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时,在输出中不可用快捷键)

1 个答案:

答案 0 :(得分:0)

您的第一个when条件失败,因为根据您在问题中显示的输出,mropt不是in mydatamydata是包含单个词典的词典列表,而mropt是该词典中的键。像下面这样的测试将起作用:

- set_fact:
    is_data: "Applicable"
  when: "'mropt' in mydata.0.block"  

当然,这假设您只对mydata列表中的第一项感兴趣。

在第二个示例中,您使用的变量output尚未在任何地方定义,因此无法确定该变量是否有效。