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
file
para crear un enlace simbólico (configurandosrc
,path
ystate=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
command
pero envuélvalo con unastat
condicional para que solo se sobrescriba una vez. Esto es especialmente útil si utiliza lanotify
para 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.