Saltstack支柱 - 使用子目录

4m1*_*4j1 1 salt-stack

我需要将我的支柱组织到子目录中.

/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进程.

我该怎么做才能让盐柱识别子目录?

Dan*_*ite 7

您的示例中存在一些误解.在子目录中组织支柱文件不会转换为生成的柱变量上的命名空间.子目录嵌套柱文件中的变量仍然位于支柱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)