file.managed salt状态中的默认值和上下文选项之间有什么区别?

Raz*_*Raz 3 salt-stack

状态file.managed 具有 defaultscontext用于模板渲染的选项。两者都提供模板变量的上下文。它们之间有什么区别?

ale*_*exK 6

defaults是在context没有适当值的情况下将传递给模板的后备默认值。如果context具有值-它将覆盖default。例如:

/etc/myconfig.cfg:
   - file.managed:
     - source: salt://myconfig.tmpl
     - template: jinja
     - defaults:
       foo: bar
     - context:
       foo: baz
Run Code Online (Sandbox Code Playgroud)

在这种情况下,的值foo将始终为baz。通常context在需要条件值时使用。例如:

/etc/myconfig.cfg:
   - file.managed:
     - source: salt://myconfig.tmpl
     - template: jinja
     - defaults:
       foo: bar
     {% if salt[grains.get]("os") == 'Debian' %}
     - context:
       foo: baz
     {% endif %}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,每个非Debian系统最终都将具有value bar,而Debian将baz在模板中具有。