Scripting

如何防止 Ansible 循環中出現空子元素列表錯誤?

  • June 28, 2021

當我嘗試通過使用者列表的所有公鑰使用子元素循環(使用 Ansible 2.6 循環)並遇到未定義公鑰的使用者時:

- authorized_key:
   user: "{{ item.0.username }}"
   state: present
   key: "{{ item.1.pub_key }}"
 loop: "{{ users | subelements('ssh_pub_keys') | default ([]) }}"
 loop_control:
   label: "{{ item.username }}"

我收到以下錯誤:the key 'ssh_pub_keys' should point to a list, got None

當我嘗試像這樣使用 skip_missing 時:

- authorized_key:
   user: "{{ item.0.username }}"
   state: present
   key: "{{ item.1.pub_key }}"
   loop: "{{ lookup('subelements', users, 'ssh_pub_keys', {'skip_missing': True})}}"
 loop_control:
   label: "{{ item.username }}"

我收到此錯誤:'list object' has no attribute 'username'

這可能是使用者列表:

users:
 - username: usera
   ssh_pub_keys:
     - from: home
       pub_key: kdzadizajdiazjd
     - from: work
       pub_key: dzadadazdzadzad
 - username: userb
   ssh_pub_keys:
     - from: home
       pub_key: kdzadizajdiazjd
     - from: work
       pub_key: dzadadazdzadzad
 - username: userc
 - username: userd
   ssh_pub_keys:
     - from: home
       pub_key: kdzadizajdiazjd
     - from: work
       pub_key: dzadadazdzadzad

ssh_pub_keys當遇到沒有列表的使用者時,如何使帶有子元素的循環轉到下一個使用者而不會引發錯誤?

問:錯誤:鍵 ‘ssh_pub_keys’ 應該指向一個列表,但沒有。

答:您可能想要使用查找並設置**‘skip_missing’: True**。

   loop: "{{ lookup('subelements',
                     users,
                     'ssh_pub_keys',
                     {'skip_missing': True}) }}"

問:錯誤:‘列表對象’沒有屬性‘使用者名’

  • 答:索引失去。修理它。
   label: "{{ item.0.username }}"

引用自:https://serverfault.com/questions/948835