簡體   English   中英

如何連接 Ansible 中的兩個字典列表

[英]How to concatenate two lists of dictonaries in Ansible

我有兩個字典列表:

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 }}\""}]

如何連接這兩個列表?

問題是我試圖在變量部分連接兩個列表,而不是任務部分。 #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

這是另一種解決方案,它迭代地連接列表列表。 我更喜歡它,因為它更通用。 它僅適用於更新版本的 ansible,因為 2.5 版中有一個錯誤需要一些時間來修復。

---
# 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 }}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM