【问题标题】:Ansible retrieve multiple array values from module outputAnsible 从模块输出中检索多个数组值
【发布时间】:2017-06-28 19:46:01
【问题描述】:

考虑以下从 ansible 模块返回的数据,我将结果注册到一个名为 kibana_lc_all 的变量中。

我希望能够遍历所有名称值,但我不确定如何使用 Ansible 来实现...我知道我可以通过以下方式打印第一个值:

- debug:
    msg: "LC info is: {{ kibana_lc_all.results[0].name }}"

但是我如何迭代并打印所有 3 个名称,或者将 3 个名称存储在一个数组变量中并稍后在另一个任务中迭代它们?此外,不会总是有 3 个名字,可能是 1 到 20 个……

  {
   u'results':[  
   {  
      u'ram_disk_id':u'',
      u'name':u'pro-ELK-Kibana-20170628-1152',
      u'image_id':u'ami-1a96a60c'
   },
   {
      u'ram_disk_id':u'',
      u'name':u'pro-ELK-Kibana-20170625-1050',
      u'image_id':u'ami-1b97d64f'
   }, 
   {
      u'ram_disk_id':u'',
      u'name':u'pro-ELK-Kibana-20170621-0931',
      u'image_id':u'ami-1b97d64f'
   },
  ]
 }

【问题讨论】:

    标签: loops ansible


    【解决方案1】:

    使用map 过滤器:

    - set_fact:
        my_list: "{{ kibana_lc_all.results | map(attribute='name') | list }}"
    

    json_query过滤器:

    - set_fact:
        my_list: "{{ kibana_lc_all | json_query('results[].name') }}"
    

    【讨论】:

    • 谢谢,我很接近,因为我偶然发现了 json_query,但不太确定语法。还有一个后续问题。现在我有了一个列表,有什么简单的方法可以从数组中删除 X 元素吗?即我想对除前两项之外的所有列表值执行操作。
    • 啊,我想我找到了,在 jmsepath 上阅读,我可以使用 json_query 通过 lc_list 从数组元素 2 中获取:“{{ kibana_lc_all | json_query('results[2: ].name') }}"
    猜你喜欢
    • 2022-11-20
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多