Criando um arquivo de propriedades com Ansible onde a propriedade não deve ser adicionada se o valor não existir [closed]

2

Eu estou tentando construir um arquivo de propriedades com propriedades obrigatórias e opcionais no Ansible com modelos.

Eu quero que cada string essencialmente estática (cada nome de propriedade opcional) apareça somente se o valor da propriedade associada existir (de uma variável Ansible)

Neste momento, meu modelo ansible é assim:

# Mandatory Properties
ManProperty1={{ ManProperty1_value }}
ManProperty2={{ ManProperty2_value }}
# Optional Properties
OptProperty1={{ OptProperty1_value }}
OptProperty2={{ OptProperty2_value }}

Mas o próprio aplicativo tem valores codificados para todas as propriedades opcionais, e eu quero apenas que uma linha "property = value" seja gravada no arquivo de propriedades a partir do modelo se a variável associada existir.

Continuando com o modelo acima, se eu definir para o ambiente X (group_vars)

ManProperty1_value = myManValue1
ManProperty2_value = myManValue2
OptProperty1_value = myOptValue1

mas não defina

OptProperty2_value

Minha saída desejada do modelo para o arquivo implantado é:

# Mandatory Properties
ManProperty1=myManValue1
ManProperty2=myManValue2
# Optional Properties
OptProperty1=myOptValue1

Deve haver uma solução melhor no Ansible para isso. O mais próximo que encontrei foi o filtro ansible, mas não consegui encontrar nada relacionado a mostrar / ocultar o texto do modelo.

Nota final: Eu tenho uma solução de backup hackish - eu tomo cada linha de property=value e faço a variável igual a string inteira. Mas parece que está faltando completamente o ponto de um modelo com muito texto estático armazenado em variáveis.

    
por Ryan 15.06.2017 / 00:38

1 resposta

3

Em primeiro lugar, este não é um problema do Ansible, é uma questão de como usar a linguagem de templates Jinja2 (e como uma questão estritamente de programação, deve ser perguntado no StackOverflow não no ServerFault).

Vá até a documentação Jinja2 sobre if declaração e você encontrará um exemplo exato para sua caso:

The if statement in Jinja is comparable with the Python if statement. In the simplest form, you can use it to test if a variable is defined, not empty and not false.

Veja um exemplo de como você deve personalizá-lo:

{% if OptProperty2_value %}OptProperty2={{ OptProperty2_value }}{% endif %}
    
por 15.06.2017 / 02:12