Oli*_*M80 3 jinja2 ansible prometheus ansible-template
在过去的几个月里,我们一直在使用 Ansible 来部署我们的服务和配置文件,并且我们一直在使用 Ansible 变量。变量被放置在我们的 (config_name).yml.j2 文件中,这使我们可以轻松进行更改而无需对所有配置进行硬编码。
例如在 Ansibles group_vars 中,我们可能有:
metric_port_var: "9100"
并且 (config_name).yml.j2 将包含一行:
EXPOSE_METRIC_PORT={{ metric_port_var}}
当配置被部署时,盒子上的配置现在是:
EXPOSE_METRIC_PORT=9100
现在我们正在为 AlertManager/Prometheus 部署配置。出现的问题是 AlertManager 还在我们尝试部署的自己的配置文件中使用 jinja 模板变量。这些其他 jinja 模板将来自盒子上的其他配置文件。
这意味着我们的 (config_name).yml.j2 理论上将包含花括号变量的混合,其中一些可能属于 Ansible,而另一些将属于另一个文件。
由于在 group_vars 中找不到变量时抛出错误,我们不能再使用 Ansible 的“模板”模块来部署我们的配置,因为特定变量应该来自 AlertManager。
我们需要一种方法来混合 jinja 模板或转义一些花括号而不是其他花括号。现在我们回到硬编码我们的配置并让 AlertManager 使用所有变量。
这对我来说很好用:
模板.j2:
foo {{ ansible_var }}
bar {{ '{{' }} other_var {{ '}}' }}
zzz {%raw%}{{ another_var }}{%endraw%}
Run Code Online (Sandbox Code Playgroud)
输出:
foo val
bar {{ other_var }}
zzz {{ another_var }}
Run Code Online (Sandbox Code Playgroud)
AlertManager 也在它自己的配置文件中使用 jinja 模板变量
警报管理器使用 Go 模板。
请参阅Jinja 文档的转义部分:
key={{ '{{' }}the_var{{ '}}' }}
Run Code Online (Sandbox Code Playgroud)
将呈现为:
key={{the_var}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5335 次 |
| 最近记录: |