【问题标题】:How to concatenate two lists of dictonaries in Ansible如何在 Ansible 中连接两个字典列表
【发布时间】:2021-07-23 07:32:55
【问题描述】:

我有两个字典列表:

dev_users:
  - name: cs3141
    key:
      cs513e_key1.pub
      cs513e_key2.pub
  - name: ab1234
    key:
      ab1234.pub
  - name: cd5678
    key:
      ab1234.pub

sys_admin_users:
  - name: xy3141
    key:
      xy3141.pub
  - name: cd1234
    key:
      cd1234.pub
  - name: ef5678
    key:
      ef5678.pub

当我尝试连接它们时:

- set_fact: users= "{{ dev_users + sys_admin_users }}"

我收到此错误:

ERROR! failed to combine variables, expected dicts but got a 'dict' and a 'AnsibleSequence': 
{}
[{"set_fact": "users= \"{{ dev_users + sys_admin_users }}\""}]

如何连接这两个列表?

【问题讨论】:

    标签: list dictionary ansible concatenation


    【解决方案1】:

    问题是我试图连接变量部分中的两个列表,而不是任务部分。 #ansible 中的 Tadeboro 给了我这个有效的代码:

    ---
    - hosts: localhost
      gather_facts: false
    
      vars:
        dev_users:
          - name: cs3141
            key:
              cs513e_key1.pub
              cs513e_key2.pub
          - name: ab1234
            key:
              ab1234.pub
          - name: cd5678
            key:
              ab1234.pub
        sys_admin_users:
          - name: xy3141
            key:
              xy3141.pub
          - name: cd1234
            key:
              cd1234.pub
          - name: ef5678
            key:
              ef5678.pub
    
      tasks:
        - name: Test
          set_fact:
            users: "{{ dev_users + sys_admin_users }}"
    

    这个命令可以正常工作:ansible-playbook -v x.yaml

    【讨论】:

      【解决方案2】:

      这是另一种解决方案,它迭代地连接列表列表。我更喜欢它,因为它更通用。它只适用于更新的 ansible 版本,因为 2.5 版中有一个 bug 需要一些时间来修复。

      ---
      # ansible-playbook -v manyx.yaml
      
      - hosts: localhost
        gather_facts: false
      
        vars:
          dev_users:
            - name: cs3141
              key:
                cs513e_key1.pub
                cs513e_key2.pub
            - name: ab1234
              key:
                ab1234.pub
            - name: cd5678
              key:
                ab1234.pub
          sys_admin_users:
            - name: xy3141
              key:
                xy3141.pub
            - name: cd1234
              key:
                cd1234.pub
            - name: ef5678
              key:
                ef5678.pub
      
          other_users:
            - name: fe9876
              key:
                fe9876.pub
      
          list_of_users_list:
            - "{{ dev_users }}"
            - "{{ sys_admin_users }}"
            - "{{ other_users }}"
      
          all_users: []
      
        tasks:
      
          - name: Test
            set_fact:
              all_users: "{{ item + all_users }}"
            loop: "{{ list_of_users_list }}"
      
          - name: print all_users
            debug:
              msg: "{{ item }}"
            loop: "{{ all_users }}"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多