¿Cómo puedo copiar más de un archivo en nodos remotos por Ansible en una tarea?
Intenté duplicar la línea del módulo de copia en mi tarea para definir archivos, pero solo copia el primer archivo.
Puedes usar el with_fileglob
bucle para esto:
- copy:
src: "{{ item }}"
dest: /etc/fooapp/
owner: root
mode: 600
with_fileglob:
- /playbooks/files/fooapp/*
/roles/db/files
pero no puedo hacerlo funcionar con este método. Lo he intentado,with_fileglob: - /roles/db/file/*
pero el camino no va bienfuente
dest
conjunto como variable?{ src: 'containerizers', dest: {{ containerizers }} }
.{ src: '{{ source.var }}', dest: '{{ dest.var }}' }
Puede usar with_together para este propósito:
fuente
Si necesita más de una ubicación, necesita más de una tarea. Una tarea de copia puede copiar solo desde una ubicación (incluidos varios archivos) a otra en el nodo.
fuente
fuente
find
módulo solo funciona para ansible 2.x pero no para ansible 1.xstdout_lines
en el valor de retorno, pero no es aplicable para elfind
módulo. Sólo se tienefiles
,examined
ymatched
como valores de retorno. Espero que ayuden a otrosfind
solo parece mirar el sistema remoto, no permitiendo tomar nada del nodo de administración. Estas respuestas, usandowith_fileglob
, parecen ser más adecuadas: stackoverflow.com/a/42290160/272387 , stackoverflow.com/a/36720342/272387 .Desde Ansible 2.5, las
with_*
construcciones están en desuso y seloop
debe usar la sintaxis. Un ejemplo práctico sencillo:fuente
O puede usar with_items:
fuente
fuente
Puede recorrer la variable con la lista de directorios:
fuente
Utilice el siguiente código fuente para copiar varios archivos en su máquina cliente.
Nota:
Si está pasando varias rutas mediante el uso de variables, entonces
src: "/ root / {{item}}"
Si está pasando la ruta utilizando una variable para diferentes elementos, entonces
src: "/ root / {{item.source_path}}"
fuente
copy
module es una herramienta incorrecta para copiar muchos archivos y / o estructura de directorio, usesynchronize
module en su lugar que usarsync
como backend. Eso sí, requiere estarrsync
instalado tanto en el controlador como en el host de destino. Es realmente poderoso, verifique la documentación de ansible .Ejemplo: copiar archivos del
build
directorio (con subdirectorios) del controlador al/var/www/html
directorio en el host de destino:fuente