Ansible: copia il file in base al nome host o al ruolo


9

Qual è il modo migliore per copiare su un file a seconda di un nome host?

Devo copiare i file con contenuto diverso ma con lo stesso nome file su più macchine.

Ho diversi file:

file.role1
file.role2
file.role3

A seconda del nome host e / o del ruolo, mi piacerebbe copiarlo file.roleXe rinominarlofile

Grazie.

Risposte:


31

Ci sono molti modi per farlo. più semplice:

- 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"

Alternativo, più compatto:

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

Oppure, usando un modello:

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

dove il modello può essere qualcosa del genere:

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

Se vuoi file diversi in ruoli diversi, perché non metti semplicemente questo:

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

nel codice di ogni ruolo?

Non esiste un modo preferito per farlo: dipende da ciò che stai effettivamente cercando di realizzare.


5
punti bonus per TIMTOWTDI !
tedder42,

Grazie - In realtà ero per un diverso file apt.sources a seconda del sistema operativo e dell'architettura senza creare un pasticcio o avere troppi ruoli / un grande file di inventario. Ho cercato una variabile dietro il nome host nel file di inventario: sources_list = debian e questo fa sì che sources.list.debian venga copiato in sources.list.
Tuinslak,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.