Odpowiedź: skopiuj plik w zależności od nazwy hosta lub roli

9

Jaki jest najlepszy sposób na skopiowanie pliku w zależności od nazwy hosta?

Muszę kopiować pliki o innej zawartości, ale o tej samej nazwie pliku, na kilka komputerów.

Mam kilka plików:

file.role1
file.role2
file.role3

W zależności od nazwy hosta i / lub roli chciałbym skopiować file.roleXi zmienić nazwę nafile

Dzięki.

Tuinslak
źródło

Odpowiedzi:

31

Istnieje wiele sposobów, aby to zrobić. Najprostszy:

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

Alternatywne, bardziej kompaktowe:

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

Lub przy użyciu szablonu:

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

gdzie szablon może być taki:

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

Jeśli chcesz mieć różne pliki w różnych rolach, dlaczego po prostu nie umieścisz tego:

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

w kodzie każdej roli?

Nie ma preferowanego sposobu, aby to zrobić - zależy to od tego, co faktycznie próbujesz osiągnąć.

Antonis Christofides
źródło
5
punkty bonusowe dla TIMTOWTDI !
tedder42
Dzięki - byłem w rzeczywistości za innym plikiem apt.sources w zależności od systemu operacyjnego i architektury bez tworzenia bałaganu lub posiadania zbyt wielu ról / dużego pliku ekwipunku. Poszedłem do zmiennej za nazwą hosta w pliku ekwipunku: sources_list = debian, co powoduje, że sources.list.debian kopiuje się do sources.list.
Tuinslak