2014-09-21 177 views
3

我想创建一个组和用户使用salt状态文件,但我不知道组,gid,user,uid,sshkey,直到我需要执行我想作为参数传入的salt状态文件。如何将参数传递给salt状态文件?

我已阅读有关Pillar创建变量。如何在执行前创建支柱?

/srv/salt/group.sls

{{ name }}: 
    group.present: 
    - gid: {{ gid }} 
    - system: True 

命令行:

salt 'SaltStack-01' state.sls group name=awesome gid=123456 

回答

1

您使用支柱,打造 “字典”,你可以参考纳入国家文件。我不知道如果我正确认识你,但这里是你可以做什么的例子:

  1. mkdir /srv/pillar/

  2. 创建/srv/pillar/groups.sls和粘贴这样的事情了进去:

    groups: 
        first: 1234 
        second: 5678 
    

    这些是您要创建的组的名称和GID。

  3. 创建/srv/pillar/top.sls所以你可以将这个支柱应用到你的爪牙。这非常类似于盐顶部的文件,这样你就可以将其应用到所有的爪牙('*')或只是一个('SaltStack-01'):

    base: 
        'hc01*': 
        - groups 
    

    要测试已经工作,可以运行salt '*' pillar.items和你应该在输出中找到groups支柱。现在

  4. ,你/srv/salt/group.sls文件应该是这样的:

    {% for group,gid in pillar.get('groups',{}).items() %} 
    {{ group }}: 
        group.present: 
        - gid: {{ gid }} 
    {% endfor %} 
    

    这是一个循环:forgroupgid在支柱groups,做休息。所以基本上,你可以把它看作如果状态文件运行两次:

    first: 
        group.present: 
        - gid: 1234 
    

    然后:

    second: 
        group.present: 
        - gid: 5678 
    

这是从this guide中。

0

,如果你不想使用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

4

如果你真的想传递像你这样的命令的数据也可以这样做:

{{ pillar['name'] }}: 
    group.present: 
    - gid: {{ pillar['gid'] }} 
    - system: True 

然后在命令行中,你可以通过在这样的数据:

salt 'SaltStack-01' state.sls group pillar='{"name": "awesome", "gid": "123456"}' 
+0

这是我一直在寻找,当我许多年前问这个问题的答案。接受的答案可能是最佳做法。谢谢戴夫! – 2017-07-12 13:46:36