usar playbook introducción examples con comentarios automatizar arquitectura ansible ansible-playbook infrastructure

playbook - introducción a ansible



Copie el archivo local si existe, usando ansible (5)

Estoy trabajando en un proyecto, y utilizamos ansible para crear un despliegue de un grupo de servidores. Una de las tareas que tengo que implementar es copiar un archivo local en el host remoto, solo si ese archivo existe localmente. Ahora estoy tratando de resolver este problema usando este

- hosts: 127.0.0.1 connection: local tasks: - name: copy local filetocopy.zip to remote if exists - shell: if [[ -f "../filetocopy.zip" ]]; then /bin/true; else /bin/false; fi; register: result - copy: src=../filetocopy.zip dest=/tmp/filetocopy.zip when: result|success

Bu esto está fallando con el siguiente mensaje: ERROR: falta el atributo ''acción'' o ''acción_local'' en la tarea "copiar el archivo filetocopy.zip local al remoto si existe"

He intentado crear esto si con la tarea de comando. Ya intenté crear esta tarea con una acción local, pero no pude hacer que funcionara. Todas las muestras que he encontrado no consideran un shell en local_action, solo hay muestras de comando, y ninguna de ellas tiene nada más que un comando. ¿Hay alguna manera de hacer esta tarea usando ansible?


¿Qué tal esto?

tasks: - copy: src=../filetocopy.zip dest=/tmp/filetocopy.zip failed_when: false

Esto copiará el archivo al destino si existe localmente. Si no existe, simplemente no hace nada ya que el error se ignora.


Cambia tu primer paso en el siguiente en

- name: copy local filetocopy.zip to remote if exists local_action: stat path="../filetocopy.zip" register: result


Fileglob permite una búsqueda de un archivo eventualmente presente.

- name: copy file if it exists copy: src="{{ item }}" dest=/destination/path with_fileglob: "/path/to/file"


Sé que esta pregunta ya ha sido respondida, pero me topé con el mismo problema esta mañana y pensé que podría publicar una respuesta más completa para futuras referencias.

Si desea verificar la existencia de un archivo local antes de realizar alguna tarea, aquí está el fragmento completo:

- name: get file stat to be able to perform a check in the following task local_action: stat path=/path/to/file register: file - name: copy file if it exists copy: src=/path/to/file dest=/destination/path when: file.stat.exists

EDITAR : si desea comprobar la existencia de un archivo remoto (como lo hice), este es el camino a seguir:

- name: get file stat to be able to perform check in the following task stat: path=/path/to/file register: file - name: copy file if it exists copy: src=/path/to/file dest=/destination/path when: file.stat.exists


Si no configura dos tareas, puede usar is_file para verificar si existen archivos locales:

tasks: - copy: src=/a/b/filetocopy.zip dest=/tmp/filetocopy.zip when: ''/a/b/filetocopy.zip'' | is_file

La ruta es relativa al directorio del libro de jugadas, por lo que se recomienda usar la variable magic role_path si se refiere a archivos dentro del directorio de funciones.

Ref: http://docs.ansible.com/ansible/latest/playbooks_tests.html#testing-paths