Resolvido: copiar arquivo dependendo do nome do host ou função

9

Qual é a melhor maneira de copiar um arquivo, dependendo do nome do host?

Eu preciso copiar arquivos com conteúdo diferente, mas com o mesmo nome de arquivo para várias máquinas.

Eu tenho vários arquivos:

file.role1
file.role2
file.role3

Dependendo do nome do host e / ou função, eu gostaria de copiar file.roleXe renomeá-lo parafile

Obrigado.

Tuinslak
fonte

Respostas:

31

Existem diversas formas de fazer isto. Mais simples:

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

Alternativa, mais compacta:

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

Ou, usando um modelo:

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

onde o modelo pode ser algo como isto:

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

Se você deseja arquivos diferentes em funções diferentes, por que simplesmente não coloca isso:

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

no código de cada função?

Não há uma maneira preferida de fazer isso - depende do que você está realmente tentando realizar.

Antonis Christofides
fonte
5
pontos de bônus para TIMTOWTDI !
tedder42
Obrigado - Na verdade, eu era para um arquivo apt.sources diferente, dependendo do sistema operacional e da arquitetura, sem criar confusão ou ter muitas funções / um grande arquivo de inventário. Procurei uma variável por trás do nome do host no arquivo de inventário: sources_list = debian e isso faz com que sources.list.debian copie para o sources.list.
Tuinslak