我对 saltstack 中的 jinja2 感到困惑

I am confused about jinja2 in saltstack

我在 github 上阅读了关于 vim-公式的状态文件 --> 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

但是我在当前directory.I中找不到salt.sls中包含的vim.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')) %}

我必须同意,阅读 Jinja 是疯了。如果您是 salt 文件结构的新手,这甚至是最糟糕的。这都是关于导致混淆的文档中对基本内容的强调。事实上,您需要了解许多基本的 saltstack 设置结构以避免混淆。

现在回答。

假设您将整个公式文件夹复制到您的 salt-states 文件夹,假设您的(盐主配置 /etc/salt/masterfiles_root:是 /srv/salt/states

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

的东西

现在来到有趣的部分:files_roots 是 /srv/salt/states,因此对于 salt-master 文件系统,从文件夹开始的任何内容都被认为是 salt://。因为你的 vim 文件夹在它下面,所以它会被称为 salt://vim

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

没有问题

Saltstatck Get started 更适合初学者入门。只需重复几次教程,它会帮助解决大部分的困惑。

(更多) 又一个基础:saltstack 如何遍历文件夹。这也解释了 include 如何找到正确的文件。 如果你有这样的东西

base:
  myserver:
    - app
    - db.myserver

所以对于第一个app,state有两种写法 第一种方式:将状态放入 app.sls 第二种方式:创建一个文件夹调用app,然后将状态放入app/init.sls

第一种方法很简单。如果您没有阅读基础知识,则第二种方法有点 "magic"。其实init.sls就是状态文件。您可以在 app 文件夹中放置多个 .sls。但是 salt 不关心其他的,除非你明确地称它们为

# 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

您可能会问,如果将两种结构混合使用会怎样?我的建议:不要这样做。您会使自己和维护您的 saltstack 的人感到困惑。