¿Cómo puedo tener un bucle anidado con un patrón fileglob?

13

Estoy tratando de crear un conjunto de claves SSH autorizadas para un conjunto de usuarios en Ansible. Tengo una usersvariable configurada así:

users:
  - { username: root, name: 'root' }
  - { username: user, name: 'User' }

En el mismo rol, también tengo un conjunto de archivos de clave autorizados en un files/public_keysdirectorio, un archivo por clave autorizada:

roles/common/files/public_keys/home
roles/common/files/public_keys/work

Quiero copiar cada clave pública a cada usuario.

He intentado usar la siguiente tarea:

- name: copy authorized keys
  authorized_key: user={{ item.0.username }} key={{ item.1 }}
  with_nested:
    - users
    - lookup('fileglob', 'public_keys/*')

Sin embargo, item.1contiene la cadena literal "lookup('fileglob', 'public_keys/*')", no cada ruta de archivo debajo files/public_keys.

¿Hay alguna manera de obtener una lista del files/public_keysdirectorio y copiar cada clave pública a cada usuario?

mipadi
fuente

Respuestas:

8

El truco es transformar el valor de retorno de fileglob en una lista a través de la splitfunción, para que pueda iterar sobre los valores:

- name: copy authorized keys
  authorized_key: 
    user: "{{ item.0.username }}"
    key: "{{ lookup('file', item.1) }}"
  with_nested:
    - "{{ users }}"
    - "{{ lookup('fileglob', 'public_keys/*').split(',') }}"

Tenga en cuenta que el uso de variables desnudas, sin {{y }}, para with_itemsfue obsoleto en Ansible v2.

conorsch
fuente
Esta debería ser la respuesta aceptada
Beyers
0

Es posible que tenga que reescribir significativamente su comando, pero existe la posibilidad de bucle sobre los globos de archivos

del ejemplo:

- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
  with_fileglob:
    - /playbooks/files/fooapp/*

Otras opciones prometedoras son los bucles sobre subelementos, que en realidad se ilustran con las claves SSH

Tom O'Connor
fuente
3
Sé que puedes recorrer los globos de archivos usando with_fileglob; No estoy seguro de cómo usar eso junto con un bucle anidado. El bucle sobre subelementos podría funcionar, pero espero no tener que especificar manualmente la lista completa de claves que quiero copiar, ya que debería poder obtener eso como una lista (usando with_fileglob).
mipadi
Yo tampoco estoy seguro. El siguiente mejor sugerencia es hacer estallar en #ansibleel irc.freenode.nety ver si los gurús no tienen alguna idea brillante.
Tom O'Connor