【问题标题】:Join a list of key-value pairs in Ansible template在 Ansible 模板中加入键值对列表
【发布时间】:2021-01-02 09:12:37
【问题描述】:

我需要将以下 yaml 字典转换为以逗号分隔的 key=value 对列表

nodes:
  node1: 192.168.56.11
  node2: 192.168.56.12

原来如此

node1=192.168.56.11,node2=192.168.56.12

在 Python 中,我会通过简单的列表理解来完成,然后加入列表:

','.join([ k+'='+v for k,v in nodes.items()])

不过,我无法弄清楚如何在 Ansible 模板中优雅地做到这一点。当然,我可以使用for 循环来做到这一点,但它会留下尾随的逗号。迄今为止我最好的镜头:

{% for k,v in nodes.items() %}{{k}}={{v}}{% if not loop.last %},{% endif %}{% endfor %}

我是否忽略了什么?

【问题讨论】:

    标签: ansible jinja2 ansible-2.x ansible-template


    【解决方案1】:

    Ansible 等价物是items() 和连接的以下链接。如果您希望它们按键排序,我添加了第二种方法:

    ---
    - hosts: localhost
      gather_facts: false
      vars:
        nodes:
          node3: 192.168.56.13
          node1: 192.168.56.11
          node4: 192.168.56.14
          node2: 192.168.56.12
    
      tasks:
      - name: print var
        debug:
          var: nodes.items()|map('join', '=')|join(',')
    
      - name: print var (items sorted)
        debug:
          var: nodes|dictsort|map('join', '=')|join(',')
    

    或者,在模板中:

    {{nodes.items()|map("join", "=")|join(",")}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多