使用Ansible构build属性文件,如果值不存在,则不应添加属性

我试图build立一个属性文件与强制性和可选属性Ansible与模板

我希望每个基本上静态的string(每个可选的属性名称)只有在相关的属性值存在时才会显示(来自Ansiblevariables)

现在,我的模板看起来像这样:

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

但是,应用程序本身已经为所有可选属性设置了硬编码值,而且如果存在相关的variables,我只希望将“property = value”行从模板写入到属性文件中。

所以继续上面的模板,如果我设置为环境X(group_vars)

 ManProperty1_value = myManValue1 ManProperty2_value = myManValue2 OptProperty1_value = myOptValue1 

但不要设置

 OptProperty2_value 

我想要的模板输出到部署的文件是:

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

Ansible对此必须有一个更好的解决scheme。 我发现最接近的是有效的过滤,但是我找不到与显示/隐藏模板文本相关的任何内容。

最后说明:我确实有一个黑客式的备份解决scheme – 我取每行property=value ,并使variables等于整个string。 但是,这感觉就像完全没有存储在variables中的静态文本的模板一样。

首先,这不是一个Ansible问题,如何使用Jinja2模板语言(作为一个严格的编程问题,应该在StackOverflow而不是ServerFault上询问)。

前往Jinja2文档if语句 ,你会发现一个确切的例子为您的情况:

Jinja中的if语句与Python if语句相似。 用最简单的forms,你可以用它来testing一个variables是否被定义,而不是空的而不是假的。

下面是一个应该如何定制的例子:

 {% if OptProperty2_value %}OptProperty2={{ OptProperty2_value }}{% endif %}