tower - Una mejor práctica ansible para copiar directorios
ansible tower (6)
En mi libro de jugadas tengo
- name: Grab h5bp/server-configs-nginx
git: repo=https://github.com/h5bp/server-configs-nginx.git
dest=/tmp/server-configs-nginx
version="3db5d61f81d7229d12b89e0355629249a49ee4ac"
force=yes
- name: Copy over h5bp configuration
command: cp -r /tmp/server-configs-nginx/{{ item }} /etc/nginx/{{ item }}
with_items:
- "mime.types"
- "h5bp/"
Lo que plantea la advertencia en ansible-lint:
[ANSIBLE0006] cp used in place of copy module
/Users/austinpray/Dropbox/DEV/opensauce/bedrock-ansible/roles/nginx/tasks/main.yml:0
Task/Handler: Copy over h5bp configuration
Entonces, esto plantea la pregunta: ¿hay una mejor manera de hacer esto con módulos ansibles en lugar de un comando?
Actualmente, el command es tu mejor opción. No hay opción de remoto a remoto. Aquí hay un hilo al respecto: cómo mover / renombrar un archivo usando una tarea imposible en un sistema remoto
Tienes un par de otras opciones:
- podría usar el módulo de
filepara crear un enlace simbólico (configurandosrc,pathystate=link. - puede revisar el repositorio en el servidor de Ansible y luego usar
copy. Este es un modelo más común para implementar código. - puede seguir usando el
commandpero envuélvalo con unastatcondicional para que solo se sobrescriba una vez. Esto es especialmente útil si utiliza lanotifypara reiniciar nginx.
Finalmente, parece que podrías estar haciendo un "despliegue por git". Esa no es siempre la mejor opción, especialmente si no "posee" ese repositorio. Pero podría estar bien, solo un poco de olor de código.
Ansible 2.0 trae el parámetro remote_src al módulo de copy : http://docs.ansible.com/ansible/copy_module.html
Ahora solo necesitas hacer algo como:
- name: Copy over h5bp configuration
copy: src=/tmp/server-configs-nginx/{{ item }} dest=/etc/nginx/{{ item }} remote_src=yes
with_items:
- "mime.types"
- "h5bp"
Otra forma es comprimir su carpeta antes y usar el módulo unarchive ansible :
- name: copy your folder using a work around
unarchive: src=your.zip dest=/destinationfolder
become: yes
Esto descomprimirá su carpeta en su destino para que tenga una copia de la carpeta ;-) pero no olvide tener el paquete de descompresión en su máquina de destino.
RHEL:
yum instalar descomprimir -y
Debian:
apt instalar descomprimir
Podría usar with_fileglob: http://docs.ansible.com/ansible/playbooks_loops.html#id4
# copy each file over that matches the given pattern
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
with_fileglob:
- /playbooks/files/fooapp/*
Puedes usar el módulo de synchronize con mode=''pull''
- name: Copy over h5bp configuration
synchronize: mode=pull src=/tmp/server-configs-nginx/{{ item }} dest=/etc/nginx/{{ item }}
with_items:
- "mime.types"
- "h5bp/"
Nota : para copiar de remoto a remoto, use el mismo comando y agregue delegate_to (como fuente remota) y el inventory_host actual (como destino remoto)
- copia: src = {{item}} dest = / etc / fooapp / directory_mode = yes
campo directory_mode del usuario.