【问题标题】:I am confused about jinja2 in saltstack我对 saltstack 中的 jinja2 感到困惑
【发布时间】:2016-05-18 07:59:31
【问题描述】:

我在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

但是我在当前目录中找不到salt.sls中包含的vim.sls。我在saltstack的网站上学习了指导手册,我知道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')) %}

【问题讨论】:

  • salt.sls中的include: - vim 字样。- vim在哪里?
  • 啊,我觉得现在用jinja2没关系,vim.sls状态文件丢失了?

标签: jinja2 salt-stack


【解决方案1】:

我必须同意,阅读 Jinja 是疯狂的。如果您是 salt 文件结构的新手,那就更糟了。这完全是由于文档中对基本内容的强调不足导致了混乱。实际上,您需要了解许多基本的 saltstack 设置结构以避免混淆。

现在回答。

假设你将整个公式文件夹复制到你的 salt-states 文件夹中,比如你的 (salt master configuration /etc/salt/master) files_root: are /srv/salt/states

其实公式假设你复制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如何遍历文件夹。这也解释了包含如何找到正确的文件。 如果你有这样的事情

base:
  myserver:
    - app
    - db.myserver

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

第一种方法很简单。如果您没有阅读基本内容,则第二种方式有点“神奇”。其实init.sls就是状态文件。您可以在app 文件夹中放置多个.sls。但是 salt 不关心其他,除非你明确地称呼它们,即,如示例中的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://db/ 文件夹,查找server.sls。 但是,结合第一种方式,您应该知道,您可以将状态文件写入/db/server/init.sls,这就是 salt 查找文件的方式。

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

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

【讨论】:

  • 所以,include : - vim 意味着我们使用整个 vim 文件夹?我认为 include 包含的文件只是文件以 .sls 结尾,但不是文件夹。是的,我读了 @ 987654354@约include,但这并不能解决我的困惑。
  • @thorsiv :还有一个基本的,我只是按问题更新。
  • :谢谢你的耐心。我发现file.slsfile/init.sls之间的区别,我太粗心了,我忽略了docs.saltstack.com/en/latest/topics/tutorials/states_pt1.htmlSLS File Namespace中的单词,我认为@987654359 @ 有助于管理状态文件。我会尝试。再次感谢。
猜你喜欢
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多