Назад | Перейти на главную страницу

Как предотвратить ошибку списка пустых подэлементов в цикле 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 список?

Возможно, вы захотите использовать уважать с участием 'skip_missing': верно.

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