我一直在SaltStack文档中寻找有关上下文'的内容的解释。手段。但是只有使用上下文的例子。
什么是' context'?
它在这做什么?为什么在Debian
文件中忽略了map.jinja
? (例如map.log_dir
似乎"跳过" a level)
# config.sls
{% from "bind/map.jinja" import map with context %}
include:
- bind
{{ map.log_dir }}:
file.directory:
- user: root
- group: {{ salt['pillar.get']('bind:config:group', map.group) }}
- mode: 775
- require:
- pkg: bind
# map.jinja
{% set map = salt['grains.filter_by']({
'Debian': {
'pkgs': ['bind9', 'bind9utils', 'dnssec-tools'],
'service': 'bind9',
'config_source_dir': 'bind/files/debian',
'zones_source_dir': 'zones',
'config': '/etc/bind/named.conf',
'local_config': '/etc/bind/named.conf.local',
'key_config': '/etc/bind/named.conf.key',
'options_config': '/etc/bind/named.conf.options',
'default_config': '/etc/default/bind9',
'default_zones_config': '/etc/bind/named.conf.default-zones',
'named_directory': '/var/cache/bind/zones',
'log_dir': '/var/log/bind9',
'user': 'root',
'group': 'bind',
'mode': '644'
},
'RedHat': {
'pkgs': ['bind'],
'service': 'named',
'config_source_dir': 'bind/files/redhat',
'zones_source_dir': 'zones',
'config': '/etc/named.conf',
'local_config': '/etc/named.conf.local',
'default_config': '/etc/sysconfig/named',
'named_directory': '/var/named/data',
'log_dir': '/var/log/named',
'user': 'root',
'group': 'named',
'mode': '640'
},
答案 0 :(得分:5)
with context
是jinja template engine。
您可以在jinja docs中阅读更多相关内容:
关于丢失的debian数据 - 这是你的完整map.jinja吗?该代码段根据grains.filter_by
错过了}, default='Debian') %}
答案 1 :(得分:2)
因为这个页面是“jinja import with context”的最高搜索结果(而另一个答案实际上并没有说明它的作用),所以当我需要弄乱时,我每隔几个月就会回到这个页面使用 Salt 但忘记了 with context
的作用:
当您在 jinja 中 import foo
时,通常您在 foo
中定义的宏无法访问您从中导入它的文件中的变量。作为优化,如果您稍后在文件中再次导入,Jinja 将缓存它。如果您改为执行 import foo with context
,则 foo
中的宏可以访问从中导入的文件中的变量。权衡是 Jinja 不再缓存 foo
,因此您需要支付渲染时间。
当您执行 include
时,您的变量确实会传递到另一个文件中。然后你渲染另一个文件的内容并将它们粘贴进去。如果你做 include foo without context
,你不会传入当前文件的变量。这很有用,因为 Jinja 将通过缓存内容来优化它foo
,加快渲染速度。