Ansible: copie el archivo según el nombre de host o el rol


9

¿Cuál es la mejor manera de copiar un archivo dependiendo de un nombre de host?

Necesito copiar archivos con contenido diferente pero con el mismo nombre de archivo en varias máquinas.

Tengo varios archivos

file.role1
file.role2
file.role3

Dependiendo del nombre de host y / o rol, me gustaría copiarlo file.roleXy cambiarle el nombre afile

Gracias.

Respuestas:


31

Hay muchas maneras de hacer esto. Más simple:

- name: Copy file.role1 to host1
  copy: src=file.role1 dest=/somewhere/file
  when: inventory_hostname == "host1"
- name: Copy file.role2 to host2
  copy: src=file.role2 dest=/somewhere/file
  when: inventory_hostname == "host2"

Alternativa, más compacta:

- name: Copy file to host
  copy: src=file.{{ inventory_hostname }} dest=/somewhere/file

O, usando una plantilla:

- name: Copy file to host
  template: src=file dest=/somewhere/file

donde la plantilla puede ser algo como esto:

{% if inventory_hostname == "host1" %}
{% include "file1" %}
{% endif %}
...

Si quieres diferentes archivos en diferentes roles, ¿por qué no simplemente pones esto?

- name: Copy file.role1 to file
  copy: src=file.role1 dest=/somewhere/file

en el código de cada rol?

No hay una forma preferida de hacerlo, depende de lo que realmente esté tratando de lograr.


55
puntos de bonificación para TIMTOWTDI !
tedder42

Gracias, en realidad estaba por un archivo apt.sources diferente dependiendo del sistema operativo y la arquitectura sin crear un desastre o tener demasiados roles / un gran archivo de inventario. Fui por una variable detrás del nombre de host en el archivo de inventario: sources_list = debian y eso hace que sources.list.debian se copie a sources.list.
Tuinslak
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.