如何在我的 Salt 状态下使用 OrderedDict Jinja2 变量



我正在尝试编写一个允许我模板化文件配置的 Jinja 宏。配置文件本身需要某些设置才能按顺序显示。我希望能够将字典作为可选变量传递给我的宏,以便我可以覆盖配置文件中的默认设置以及传递非默认设置。

例如,我的默认设置可能如下所示:

{% set default = {
   'default_setting': 'default_value',
   'another_default_setting': 'another_default_value',
} %}

我的新设置:

{% set new = {
   'default_setting': 'new_value',
   'new_setting': 'another_new_value',
} %}

然后在我的模板中:

{% set settings = salt['slsutil.merge'](default, new, 'overwrite') %}
{% for setting, value in settings.items() %}
{{ setting }} = {{ value }};
{% endfor %}

哪个应该输出:

default_setting = new_value;
another_default_setting = another_default_value;
new_setting = another_new_value;

Jinja2 中没有OrderedDict,因此您需要使用元组元组作为默认设置。由于您的新设置只是为了覆盖默认设置而不篡改原始顺序,因此它应该保留为字典。

{% set default = (
   ('name1', 'value1'),
   ('name2', 'value2'),
   ('name3', 'value3')
) %}
{% set new = {
   'name1': 'new_value1',
   'name2': 'new_value2',
} %}
{% for setting in default -%}
  {%- set name, value = setting %}
{{ name }} = {{ new[name] if name in new else value }};
{%- endfor -%}

最新更新