Scripting
如何防止 Ansible 循環中出現空子元素列表錯誤?
當我嘗試通過使用者列表的所有公鑰使用子元素循環(使用 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 }}"