Ansible: copie le fichier en fonction du nom d'hôte ou du rôle


9

Quelle est la meilleure façon de copier un fichier en fonction d'un nom d'hôte?

J'ai besoin de copier des fichiers avec un contenu différent mais avec le même nom de fichier sur plusieurs machines.

J'ai plusieurs fichiers:

file.role1
file.role2
file.role3

Selon le nom d'hôte et / ou le rôle, j'aimerais le copier file.roleXet le renommer enfile

Merci.

Réponses:


31

Il existe plusieurs façons de procéder. Le plus 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"

Alternative, plus compacte:

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

Ou, en utilisant un modèle:

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

où le modèle peut être quelque chose comme ceci:

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

Si vous voulez différents fichiers dans différents rôles, pourquoi ne pas simplement mettre ceci:

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

dans le code de chaque rôle?

Il n'y a pas de façon préférée de le faire - cela dépend de ce que vous essayez réellement d'accomplir.


5
des points bonus pour TIMTOWTDI !
tedder42

Merci - j'étais en fait pour un fichier apt.sources différent selon le système d'exploitation et l'architecture sans créer de gâchis ni avoir trop de rôles / un gros fichier d'inventaire. J'ai choisi une variable derrière le nom d'hôte dans le fichier d'inventaire: sources_list = debian et qui provoque la copie de sources.list.debian dans sources.list.
Tuinslak
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.