【问题标题】:How to use an OrderedDict Jinja2 variable in my Salt state?如何在我的 Salt 状态中使用 OrderedDict Jinja2 变量?
【发布时间】:2018-04-09 12:41:59
【问题描述】:

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

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

{% 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;

【问题讨论】:

    标签: python jinja2 salt-stack


    【解决方案1】:

    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 -%}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 2021-01-02
      • 2015-10-02
      • 2015-12-08
      • 2018-03-19
      相关资源
      最近更新 更多