16 votes

Comment puis-je avoir une boucle imbriquée avec un motif fileglob ?

J'essaie de créer un ensemble de clés SSH autorisées pour un ensemble d'utilisateurs dans Ansible. J'ai un users variable comme suit :

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

Dans le même rôle, je dispose également d'un ensemble de fichiers clés autorisés dans un fichier files/public_keys un fichier par clé autorisée :

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

Je veux copier chaque clé publique pour chaque utilisateur.

J'ai essayé d'utiliser la tâche suivante :

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

Cependant, item.1 contient la chaîne littérale "lookup('fileglob', 'public_keys/*')" et non pas chaque chemin d'accès à un fichier sous files/public_keys .

Existe-t-il un moyen d'obtenir la liste des files/public_keys et copier chaque clé publique pour chaque utilisateur ?

12voto

Matt Points 31

L'astuce consiste à transformer la valeur de retour de fileglob en une liste via la fonction split afin de pouvoir itérer sur les valeurs :

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

Il est à noter que l'utilisation de variables nues, sans {{ y }} , pour with_items a été supprimée dans Ansible v2.

0voto

Pablo Venturino Points 1660

Il se peut que vous deviez réécrire votre commande de manière significative, mais il est prévu de boucler sur des groupes de fichiers

de l'exemple :

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

D'autres options prometteuses sont Boucle sur les sous-éléments ce qui est en fait illustré par les clés SSH

0voto

matson kepson Points 139

Pour moi, cela ne fonctionnait que sous cette forme

    - name: Set up authorized keys for root
      authorized_key:
        user: root
        state: present
        key: "{{ lookup('file', item) }}"
      with_fileglob: 'public_keys/*.pub'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X