需要从ansible输出中过滤字符串及其值

问题描述 投票:0回答:1

我在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键在输出中不可用)

ansible
1个回答
0
投票

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

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

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

在你的第二个例子中,你正在使用一个你没有在任何地方定义的变量output,因此不可能判断它是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.