ansible: ¿por qué se salta el módulo de archivo?

8

Tengo un libro de jugadas ansible 1.1 donde hago algo como esto:

- 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 segunda tarea, "cambiar de propietario", siempre se salta. ¿Alguien puede ayudarme a descubrir por qué? ¿se salta el módulo de archivo porque los archivos existen? Estoy atascado :)

deadsven
fuente
Nunca se supo si permite $ item ... pensé que era {{item}}
Arun Sangal

Respuestas:

16

De la documentación :

Recuerde que los complementos de búsqueda se ejecutan en la máquina "controladora":

with_fileglob es un complemento de búsqueda, por lo que busca archivos en el servidor local, desde el que está ejecutando ansible-playbook.

Esto es lo que puedes hacer:

- 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
fuente
eso tiene tanto sentido ahora que lo dices. Por cierto, resolví esto usando [shell: chown -R newuser: newgroup / to]
deadsven
3
Usar shell en este caso no es la forma preferible ya que está perdiendo idempotencia. En su lugar, debe usar el módulo de archivo y with_items
Tom Aac
sí, me gustaría usar el módulo de archivo, pero with_items no admite globs, ¿verdad? enumerar todos los archivos en una lista with_items no es realmente lo que quiero
deadsven
Mira mi respuesta, hay lo que necesitas
Tom Aac
2
Cada vez que ejecuta chown, cambia la marca de tiempo del archivo. En particular ctime. Eso podría ser un problema para algunos software de respaldo, por ejemplo.
Tom Aac
5

Ansible 1.1 agregó el parámetro recurse al módulo de archivo, por lo que todo lo que necesita hacer para su tarea de cambio de propiedad es esto:

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

Esto lo hará más evidente cuando las cosas realmente cambien; el uso del shell o los módulos de comando siempre devolverá un estado cambiado, incluso si nada se cambió realmente.

HitScan
fuente