【问题标题】:Ansible: how do I concatenate attributes of dictionaries from a list?Ansible:如何从列表中连接字典的属性?
【发布时间】:2020-11-03 16:17:24
【问题描述】:

假设我有这个列表:

hosts:
  - {"ip": "1.2.3.4", "hostname": "www.example.com"}
  - {"ip": "42.42.42.42", "hostname": "www.wikipedia.com"}

我想获取这样的字符串(放入模板中):

'1.2.3.4,42.42.42.42'

这与我使用hosts|join(',') 获得的类似,但我只想连接ip 的值,所以我可能应该先获得一个IP 列表......但是如何?

【问题讨论】:

    标签: ansible jinja2 ansible-template


    【解决方案1】:

    您可以将hosts 传递给map(attribute='ip') 过滤器。

    这里有一个PB来试试:

    ---
    - hosts: localhost
      gather_facts: false
      vars:
        hosts:
          - {"ip": "1.2.3.4", "hostname": "www.example.com"}
          - {"ip": "42.42.42.42", "hostname": "www.wikipedia.com"}
      tasks:
      - debug:
          var: hosts | map(attribute='ip') | list | join(',')
    

    干杯

    【讨论】:

    • 您可以省略 list 过滤器。过滤器 join 也适用于 iterable {{ hosts|map(attribute='ip')|join(',') }}
    • 感谢您的提示! @VladimirBotka
    猜你喜欢
    • 2021-07-23
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多