vars tower playbook commands ansible ansible-playbook

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 (configurando src , path y state=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 una stat condicional para que solo se sobrescriba una vez. Esto es especialmente útil si utiliza la notify 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



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.