tower - ansible tutorial
Copie varios archivos con Ansible (8)
O puede usar with_items:
- copy:
src: "{{ item }}"
dest: /etc/fooapp/
owner: root
mode: 600
with_items:
- dest_dir
¿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.
Puede usar el bucle
with_fileglob
para esto:
- copy:
src: "{{ item }}"
dest: /etc/fooapp/
owner: root
mode: 600
with_fileglob:
- /playbooks/files/fooapp/*
Puede usar with_together para este propósito:
- name: Copy multiple files to multiple directories
copy: src={{ item.0 }} dest={{ item.1 }}
with_together:
- [ ''file1'', ''file2'', ''file3'' ]
- [ ''/dir1/'', ''/dir2/'', ''/dir3/'' ]
Si necesita más de una ubicación, necesita más de una tarea. Una tarea de copia solo puede copiar de una ubicación (incluidos varios archivos) a otra en el nodo.
- copy: src=/file1 dest=/destination/file1
- copy: src=/file2 dest=/destination/file2
# copy each file over that matches the given pattern
- copy: src={{ item }} dest=/destination/
with_fileglob:
- /files/*
copy
módulo es una herramienta incorrecta para copiar muchos archivos y / o estructura de directorios, use el módulo de
synchronize
lugar, que usa
rsync
como back-end.
Eso sí, requiere
rsync
instalado en el controlador y el host de destino.
Es realmente poderoso, verifique la
documentación ansible
.
Ejemplo: copie los archivos del directorio de
build
(con subdirectorios) del controlador al directorio
/var/www/html
en el host de destino:
synchronize:
src: ./my-static-web-page/build/
dest: /var/www/html
rsync_opts:
- "--chmod=D2755,F644" # copy from windows - force permissions
- hosts: lnx
tasks:
- find: paths="/appl/scripts/inq" recurse=yes patterns="inq.Linux*"
register: file_to_copy
- copy: src={{ item.path }} dest=/usr/local/sbin/
owner: root
mode: 0775
with_items: "{{ files_to_copy.files }}"
- name: Your copy task
copy: src={{ item.src }} dest={{ item.dest }}
with_items:
- { src: ''containerizers'', dest: ''/etc/mesos/containerizers'' }
- { src: ''another_file'', dest: ''/etc/somewhere'' }
- { src: ''dynamic'', dest: ''{{ var_path }}'' }
# more files here
- name: find inq.Linux*
find: paths="/appl/scripts/inq" recurse=yes patterns="inq.Linux*"
register: find_files
- name: set fact
set_fact:
all_files:
- "{{ find_files.files | map(attribute=''path'') | list }}"
when: find_files > 0
- name: copy files
copy:
src: "{{ item }}"
dest: /destination/
with_items: "{{ all_files }}"
when: find_files > 0