我对 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/master
)files_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.sls
或 salt://vim.sls
。
您可能会问,如果将两种结构混合使用会怎样?我的建议:不要这样做。您会使自己和维护您的 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/master
)files_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.sls
或 salt://vim.sls
。
您可能会问,如果将两种结构混合使用会怎样?我的建议:不要这样做。您会使自己和维护您的 saltstack 的人感到困惑。