
Preciso fazer um playbook que pegue um arquivo de modelo, interpole algumas variáveis e coloque o arquivo resultante em outro diretório.
A primeira parte do problema é que o arquivo resultante será usado como outro manual do Ansible, portanto, o arquivo de origem contém outras interpolações e essas interpolações devem ser preservadas como estão. Como exemplo, vamos supor que o arquivo de origem contenha algo assim:
key1: {{ value1 }}
key2: {{ value2 }}
O valor de key1
deve ser interpolado pelo meu manual (se tornará os valores da value1
variável), mas ao mesmo tempo value2
precisa ser mantido exatamente como está (será {{ value2 }}
.
A segunda parte do problema é que não posso simplesmente modificar o arquivo de origem e adicionar barras invertidas antes das chaves, porque esse arquivo está sendo atualizado por outros processos. Além disso, como o arquivo de modelo é atualizado de tempos em tempos, não posso prever quais variáveis precisam ser ignoradas após a próxima atualização. Só sei que preciso interpolar value1
, mas não sei quais são os nomes das outras variáveis (hoje tem value2
e value3
, amanhã os desenvolvedores renomearam value2
e value2_deprecated
adicionaram value3
em algum lugar).
Posso perguntar ao Ansible que preciso value1
apenas interpolar?
Obrigado.
Responder1
P:"O modelo contém interpolações e essas interpolações devem ser preservadas como estão."
A: Declarar variáveis padrão
lbr: '{{ "{{" }}'
rbr: '{{ "}}" }}'
value1: '{{ lbr }} value1 {{ rbr }}'
value2: '{{ lbr }} value2 {{ rbr }}'
e crie o modelo
shell> cat template.yml.j2
key1: {{ value1 }}
key2: {{ value2 }}
P:"Preciso interpolar apenas o valor1."
R: Substitua o valor padrão, por exemplo
- template:
src: template.yml.j2
dest: playbook.yml
vars:
value1: value1
dá
shell> cat playbook.yml
key1: value1
key2: {{ value2 }}