Meu caso de uso é o seguinte:
Eu tenho um arquivo de modelo e gostaria de criar 2 arquivos diferentes a partir desse modelo, com as variáveis sendo preenchidas por um conjunto diferente de variáveis para cada arquivo.
Por exemplo, digamos que eu queira modelar o arquivo que contém a linha:
mkdir -p {{myTemplateVariable}}
Gostaria de encontrar uma maneira adequada de preencher essa variável com "Arquivo1" e "Arquivo2". Algo como :
- name: template test 1
template:
src=myTemplateFile
dest=result1
- name: template test 2
template:
src=myTemplateFile
dest=result2
onde eu poderia especificar para o primeiro modelo que a variável a ser usada é a = "Arquivo1" e para o segundo, b = "Arquivo2".
ansible
ansible-template
Kestemont Max
fonte
fonte
Respostas:
Para Ansible 2.x:
Para Ansible 1.x:
Infelizmente, o
template
módulo não suporta a passagem de variáveis para ele, que podem ser usadas dentro do modelo. Houve uma solicitação de recurso, mas foi rejeitada.Posso pensar em duas soluções alternativas:
1. Incluir
A
include
instrução suporta a passagem de variáveis. Portanto, você pode ter suatemplate
tarefa dentro de um arquivo extra e incluí-lo duas vezes com os parâmetros apropriados:my_include.yml:
main.yml:
2. Redefina myTemplateVariable
Outra forma seria simplesmente redefinir myTemplateVariable antes de cada
template
tarefa.fonte
Com o Ansible 2.x você pode usar
vars:
com tarefas.Modelo
test.j2
:Livro de cantadas:
Isso vai passar
myTemplateVariable
valores diferentes para test.j2.fonte
Você pode fazer isso muito facilmente, veja minha receita de supervisor:
job.conf.j2:
Resultado:
Aproveitar!
fonte
Esta é uma solução / hack que estou usando:
tarefas / main.yml:
vars / main.yml
templates / test.j2:
Depois de executar isso, você entra
this is var_a
em / tmp / templateA ethis is var_b
/ tmp / templateB.Basicamente, você abusa
with_items
de renderizar o modelo com cada item da lista de um item. Isso funciona porque você pode controlar o que a lista está ao usarwith_items
.A desvantagem disso é que você deve usar
item
o nome da variável em seu modelo.Se você deseja passar mais de uma variável desta forma, você pode ditar como itens de sua lista assim:
e, em seguida, consulte-os em seu modelo desta forma:
fonte
with_items: '{{ var_a }}'
Eu fiz dessa maneira.
Em tasks / main.yml
e em vars / main.yml
e em templates / myTemplateFile.j2
Espero que isso resolva seu problema.
fonte
with_dict
é a melhor solução.IMPORTANTE: Observe que um item não precisa ser apenas uma string, pode ser um objeto com quantas propriedades você quiser, de forma que você possa passar qualquer número de variáveis.
No modelo, tenho:
fonte
Tive um problema semelhante para resolver, aqui está uma solução simples de como passar variáveis para arquivos de modelo, o truque é escrever o arquivo de modelo aproveitando a variável. Você precisa criar um dicionário (lista também é possível), que contém o conjunto de variáveis correspondente a cada um dos arquivos. Então, dentro do arquivo de modelo, acesse-os.
ver abaixo:
o manual
fonte
Outro exemplo do mundo real usando uma lista
um extrato de um template para php.ini
Este é o var
Então eu implanto com isso
fonte