Saltstack支柱 - 使用子目录

时间:2014-12-04 15:37:20

标签: salt-stack

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

/srv/pillar/
├── app1
│   └── env1
│       └── conf.sls
├── data.sls
└── top.sls

我已经加入了top.sls:

base:
  '*':
    - data
    - app1/env1/conf

当我为变量info请求data.sls时,它可以工作:

salt '*' pillar.get info
local:
    some data

但是当我为变量info请求conf.sls时,没有任何作用:

salt '*' pillar.get app1.env1.info 

什么都没有!

我已经执行了:

saltutil.refresh_pillar

并重新启动salt进程。

如何让盐柱识别子目录?

1 个答案:

答案 0 :(得分:7)

您的示例中存在一些误解。在子目录中组织支柱文件不会转换为生成的柱变量上的命名空间。子目录嵌套柱文件中的变量仍然位于支柱词的根部。

要在您的支柱top.sls文件中包含子目录,请使用点表示法:

创建支柱so / test / example.sls

cd /srv/pillar
mkdir -p so/test
echo 'foo: bar' > so/test/example.sls

编辑top.sls

base:
  '*':
    - users

  lead:
    - so.test.example

刷新对奴才的支柱'领先'

$ sudo salt lead saltutil.refresh_pillar
lead:
    None

从柱子中提取foo的值

$ sudo salt lead pillar.get foo
lead:
    bar

如果你想在柱头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"
}