Ansible: Datei je nach Hostname oder Rolle kopieren


9

Was ist der beste Weg, um eine Datei abhängig von einem Hostnamen zu kopieren?

Ich muss Dateien mit unterschiedlichem Inhalt, aber mit demselben Dateinamen auf mehrere Computer kopieren.

Ich habe mehrere Dateien:

file.role1
file.role2
file.role3

Je nach Hostname und / oder Rolle möchte ich es kopieren file.roleXund umbenennen infile

Vielen Dank.

Antworten:


31

Es gibt viele Möglichkeiten, dies zu tun. Am einfachsten:

- 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, kompakter:

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

Oder verwenden Sie eine Vorlage:

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

wo die Vorlage so etwas sein kann:

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

Wenn Sie verschiedene Dateien in verschiedenen Rollen haben möchten, setzen Sie diese einfach ein:

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

im Code jeder Rolle?

Es gibt keinen bevorzugten Weg, dies zu tun - es hängt davon ab, was Sie tatsächlich erreichen möchten.


5
Bonuspunkte für TIMTOWTDI !
Tedder42

Vielen Dank - ich war tatsächlich für eine andere apt.sources-Datei, abhängig von Betriebssystem und Architektur, ohne ein Durcheinander zu verursachen oder zu viele Rollen / eine große Inventardatei zu haben. Ich habe mich für eine Variable hinter dem Hostnamen in der Inventardatei entschieden: sources_list = debian und das führt dazu, dass sources.list.debian nach sources.list kopiert wird.
Tuinslak
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.