Ansible: копировать файл в зависимости от имени хоста или роли

9

Какой лучший способ скопировать файл в зависимости от имени хоста?

Мне нужно скопировать файлы с различным содержимым, но с одним и тем же именем файла на несколько машин.

У меня есть несколько файлов:

file.role1
file.role2
file.role3

В зависимости от имени хоста и / или роли, я хотел бы скопировать file.roleXи переименовать его вfile

Спасибо.

Tuinslak
источник

Ответы:

31

Есть много способов сделать это. Простейшие:

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

Альтернатива, более компактная:

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

Или, используя шаблон:

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

где шаблон может быть примерно таким:

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

Если вам нужны разные файлы в разных ролях, почему бы вам просто не написать это:

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

в коде каждой роли?

Не существует предпочтительного способа сделать это - это зависит от того, чего вы на самом деле пытаетесь достичь.

Антонис Христофидес
источник
5
бонусные баллы за TIMTOWTDI !
tedder42
Спасибо - я на самом деле был для другого файла apt.sources в зависимости от ОС и архитектуры, не создавая беспорядка и не имея слишком много ролей / большого файла инвентаря. Я выбрал переменную позади имени хоста в файле инвентаря: sources_list = debian, и это приводит к копированию sources.list.debian в sources.list.
Туинслак