ansible: pourquoi le module de fichiers saute-t-il?

8

J'ai un playbook ansible 1.1 où je fais quelque chose comme ceci:

- name: copy files
  sudo: True                                                                                                             
  shell: cp /from/* /to/

- name: change owner
  sudo: True
  file: path=$item owner=newuser group=newgroup
  with_fileglob: /to/*

La deuxième tâche, "changer de propriétaire" est toujours ignorée. quelqu'un peut-il m'aider à découvrir pourquoi? le module de fichiers est-il ignoré parce que les fichiers existent? Je suis coincé :)

deadsven
la source
Je ne savais pas si cela permettait $ item ... Je pensais que c'était {{item}}
Arun Sangal

Réponses:

16

De la documentation :

N'oubliez pas que les plugins de recherche sont exécutés sur la machine "de contrôle":

with_fileglob est un plugin de recherche, il recherche donc les fichiers sur le serveur local, celui à partir duquel vous exécutez ansible-playbook.

Voici ce que vous pouvez faire:

- name: list files 
  action: command ls -1 /to/* 
  register: dumpfiles 

- name: change ownership 
  action: file path=$item owner=newuser group=newgroup
  with_items: ${dumpfiles.stdout_lines}
Tom Aac
la source
cela a tellement de sens maintenant que vous le dites. BTW, j'ai résolu cela en utilisant [shell: chown -R newuser: newgroup / to]
deadsven
3
Dans ce cas, l'utilisation de shell n'est pas préférable car vous perdez l'idempotence. Vous devriez plutôt utiliser le module de fichiers et with_items
Tom Aac
oui, j'aimerais utiliser le module de fichiers, mais with_items ne prend pas en charge les globs, n'est-ce pas? lister chaque fichier dans une liste with_items n'est pas vraiment ce que je veux
deadsven
Voir ma réponse, il y a ce dont vous avez besoin
Tom Aac
2
Chaque fois que vous exécutez chown, vous modifiez l'horodatage du fichier. En particulier ctime. Cela pourrait être un problème pour certains logiciels de sauvegarde par exemple.
Tom Aac
5

Ansible 1.1 a ajouté le paramètre recurse au module de fichiers, donc tout ce que vous devez faire pour votre tâche de changement de propriétaire est le suivant:

- name: change ownership 
  action: file state=directory recurse=yes path=/to/ owner=newuser group=newgroup

Cela le rendra plus apparent lorsque les choses changeront; l'utilisation du shell ou des modules de commande retournera toujours un état modifié, même si rien n'a réellement été changé.

HitScan
la source