我一直在寻找SaltStack文档中有关"上下文"含义的解释.但是只有使用上下文的例子.
什么是'背景'?
它在这做什么?为什么Debian在map.jinja文件中被忽略?(例如map.log_dir似乎"跳下"一个级别)
# 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'
},
Run Code Online (Sandbox Code Playgroud)
Amp*_*cid 20
由于此页面是“jinja import with context”的顶部搜索结果(另一个答案实际上并没有说明它的作用),并且当我需要弄乱 Salt 时,我每隔几个月就会回到此页面,但是忘记什么with context:
当您import foo在 jinja 中时,通常您定义的宏foo无法访问从中导入它的文件中的变量。作为一项优化,如果您稍后在文件中再次导入,Jinja 将会缓存此内容。相反,如果您这样做import foo with context,则 中的宏foo 可以访问从中导入的文件中的变量。代价是 Jinja 不再缓存foo,因此您需要付出渲染时间的代价。
当您这样做时include,您的变量确实会传递到另一个文件中。然后渲染另一个文件的内容并将它们粘贴进去。如果这样做include foo without context,则不会传递当前文件的变量。这很有用,因为 Jinja 会通过缓存 的内容来优化它foo,加快渲染速度。
with context是jinja模板引擎的一部分.
您可以在jinja文档中阅读更多相关信息:
关于丢失的debian数据 - 这是你的完整map.jinja吗?该片段}, default='Debian') %}根据grain.filter_by错过了