我需要将我的支柱组织到子目录中.
/srv/pillar/
??? app1
? ??? env1
? ??? conf.sls
??? data.sls
??? top.sls
Run Code Online (Sandbox Code Playgroud)
我把它放在top.sls中:
base:
'*':
- data
- app1/env1/conf
Run Code Online (Sandbox Code Playgroud)
当我请求data.sls for variable时info,它可以工作:
salt '*' pillar.get info
local:
some data
Run Code Online (Sandbox Code Playgroud)
但是当我请求conf.sls变量时info,没有任何作用:
salt '*' pillar.get app1.env1.info
Run Code Online (Sandbox Code Playgroud)
没有显示!
我已经执行了:
saltutil.refresh_pillar
Run Code Online (Sandbox Code Playgroud)
并重新启动salt进程.
我该怎么做才能让盐柱识别子目录?
您的示例中存在一些误解.在子目录中组织支柱文件不会转换为生成的柱变量上的命名空间.子目录嵌套柱文件中的变量仍然位于支柱dict的根部.
要在柱top.sls文件中包含子目录,请使用点表示法:
创建支柱so/test/example.sls
cd /srv/pillar
mkdir -p so/test
echo 'foo: bar' > so/test/example.sls
Run Code Online (Sandbox Code Playgroud)
编辑top.sls
base:
'*':
- users
lead:
- so.test.example
Run Code Online (Sandbox Code Playgroud)
刷新对小兵'领先'的支柱
$ sudo salt lead saltutil.refresh_pillar
lead:
None
Run Code Online (Sandbox Code Playgroud)
从支柱中提取foo的值
$ sudo salt lead pillar.get foo
lead:
bar
Run Code Online (Sandbox Code Playgroud)
如果要在柱头dict中命名变量,请在so/test/example.sls中表示:
$ cat /srv/pillar/so/test/examples.sls
so:
test:
foo: bar
$ sudo salt lead pillar.get so --out=json
{
"lead": {
"test": {
"foo": "bar"
}
}
}
$ sudo salt lead pillar.get so:test:foo --out=json
{
"lead": "bar"
}
Run Code Online (Sandbox Code Playgroud)