我对盐堆中的jinja2很困惑

时间:2016-05-18 07:59:32

标签: jinja2 salt-stack

我在github上阅读了关于vim-formula的状态文件 - > Here

有一个名为salt.sls的文件:

{% from "vim/map.jinja" import vim with context %}
include:
  - vim
sakt_vimfiles:
  file.recurse:
    - name: {{ vim.share_dir }}
    - source: salt://vim/files/salt

但我无法在当前目录中找到vim.sls中包含的salt.sls。我在saltstack的网站上学习了guidbook,我知道include这个词意味着重用状态文件,对吗?

所以我认为它必须与jinja2 {% from "vim/map.jinja" import vim with context %}

相关

和map.jinja:

{% set vim = salt['grains.filter_by']({
'Arch': {
    'pkg': 'vim',
    'share_dir': '/usr/share/vim/vimfiles',
    'group': 'root',
    'config_root': '/etc',
},
'Debian': {
    'pkg': 'vim',
    'share_dir': '/usr/share/vim/vimfiles',
    'group': 'root',
    'config_root': '/etc/vim',
},
'RedHat': {
    'pkg': 'vim-enhanced',
    'share_dir': '/usr/share/vim/vimfiles',
    'group': 'root',
    'config_root': '/etc',
},
'Suse': {
    'pkg': 'vim',
    'share_dir': '/usr/share/vim/site',
    'group': 'root',
    'config_root': '/etc',
},
'FreeBSD': {
    'pkg': 'vim',
    'share_dir': '/usr/local/share/vim/vimfiles',
    'group': 'wheel',
    'config_root': '/etc',
},
}, merge=salt['pillar.get']('vim:lookup')) %}

1 个答案:

答案 0 :(得分:0)

我必须同意,阅读Jinja是疯了。如果你是盐文件结构的新手,它甚至是最糟糕的。所有关于穷人都强调文档中的基本内容会引起混淆。实际上,您需要了解许多基本的saltstack设置结构以避免混淆。

现在回答。

想象一下,您将整个公式文件夹复制到salt-states文件夹,比如说(盐主配置/etc/salt/masterfiles_root/srv/salt/states

实际上,公式ASSUME复制文件根目录下的github公式source / vim文件夹。因此,你应该有类似/srv/salt/states/vim的东西。

现在来看看有趣的部分:files_roots是/srv/salt/states,因此对于salt-master文件系统,从文件夹开始的任何内容都会被视为salt://。由于您的vim文件夹位于其下,因此它将引用为salt://vim

现在回到salt.sls中的/srv/salt/states/vim,找到include : - vim

没问题

Saltstatck Get started 对初学者来说要好得多。只需重复本教程一段时间,它将有助于解决大部分困惑。

(更多) 再一个基本的:盐栈如何遍历文件夹。这也解释了include如何找到正确的文件。 如果你有类似的东西

base:
  myserver:
    - app
    - db.myserver

因此,对于第一个app,有两种方法可以编写状态 第一种方式:将状态置于app.sls 第二种方式:创建文件夹调用app,然后将状态置于app/init.sls

第一种方式很简单。如果你没有读基本的话,第二种方式有点“神奇”。实际上,init.sls是状态文件。您可以在.sls文件夹中放置许多app。但盐不关心其他,除非你明确地称它们,即如例子db.server

# This is the first way, direct reference to the sls file
+--app.sls
+--/db
   +--myserver.sls 

# Second way, using init.sls as anchor inside folder.
+--/app
   +-- init.sls
+--/db
   +--/myserver
      +--init.sls 

所以来到第二路db.server 现在看起来很简单,salt master只需遍历salt://db/文件夹,查找server.sls。 但是,与第一种方式混合,您应该知道,您可以将状态文件写入/db/server/init.sls,这就是salt查找文件的方式。

现在,回到你的vim公式文件夹,只需阅读/vim/init.sls。现在您了解include: vim平均值遍历salt://vim/init.slssalt://vim.sls

你可能会问,如果混合两种结构怎么办?我的建议:不要这样做。你会混淆自己和那些维护你的盐堆的人。