我想创建一个使用salt状态文件的组和用户,但我不知道group,gid,user,uid,sshkey,直到我需要执行我想作为参数传入的salt状态文件。
我已阅读有关Pillar创建变量的内容。如何在执行前创建支柱?
/srv/salt/group.sls
:
{{ name }}:
group.present:
- gid: {{ gid }}
- system: True
命令行:
salt 'SaltStack-01' state.sls group name=awesome gid=123456
答案 0 :(得分:10)
如果你真的想传递命令中的数据,就像你也可以这样做:
{{ pillar['name'] }}:
group.present:
- gid: {{ pillar['gid'] }}
- system: True
然后在命令行上传入如下数据:
salt 'SaltStack-01' state.sls group pillar='{"name": "awesome", "gid": "123456"}'
答案 1 :(得分:3)
您可以使用Pillars创建可以引用到State文件的“词典”。我不确定我是否正确理解你,但这是你可以做的一个例子:
mkdir /srv/pillar/
创建/srv/pillar/groups.sls
并将类似内容粘贴到其中:
groups: first: 1234 second: 5678
这些是您要创建的组的名称和GID。
创建/srv/pillar/top.sls
,以便将此支柱应用于您的仆从。这与salt top文件非常相似,因此您可以将其应用于所有minions('*'
)或仅应用于{'SaltStack-01'
}:
base: 'hc01*': - groups
要测试那是否有效,您可以运行salt '*' pillar.items
,并且应该在输出中的某处找到groups
支柱。
现在,您的/srv/salt/group.sls
文件应如下所示:
{% for group,gid in pillar.get('groups',{}).items() %}
{{ group }}:
group.present:
- gid: {{ gid }}
{% endfor %}
这是一个for循环:支柱for
中的每个group
和gid
groups
完成其余的工作。所以基本上,你可以看一下状态文件运行两次:
first: group.present: - gid: 1234
然后:
second: group.present: - gid: 5678
这是从this guide加入的。
答案 2 :(得分:2)
如果您不想使用Pillar
你可以这样做:
# /srv/salt/params.yaml
name: awesome
gid: 123456
然后:
# /srv/salt/groups.sls
{% import_yaml "params.yaml" as params %}
{{ params['name'] }}:
group.present:
- gid: {{ parmas['gid'] }}
- system: True
更多详情:doc
答案 3 :(得分:0)
另一种传递的好方法(以防您不想使用柱子,也不想像其他答案所示那样创建文件)-您可以将本地环境变量传递给 salt 并从 sls 文件中读取它,喜欢这:
命令:
MYVAR=world salt 'SaltStack-01' state.sls somesalt # Note the env variable passed at the beginning
sls 文件:
# /srv/salt/somesalt.sls
foo:
cmd.run:
- name: |
echo "hello {{ salt['environ.get']('MYVAR') }}"
将打印到标准输出:
hello world
要知道的另一件好事是 env 变量也会传递给任何包含的盐状态。