如何将参数传递给salt状态文件?

Rya*_*rah 7 python salt-stack

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

我已经阅读了有关Pillar创建变量的内容.如何在执行前创建支柱?

/srv/salt/group.sls:

{{ name }}:
  group.present:
    - gid: {{ gid }}
    - system: True
Run Code Online (Sandbox Code Playgroud)

命令行:

salt 'SaltStack-01' state.sls group name=awesome gid=123456
Run Code Online (Sandbox Code Playgroud)

Uta*_*ave 10

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

{{ pillar['name'] }}:
  group.present:
    - gid: {{ pillar['gid'] }}
    - system: True
Run Code Online (Sandbox Code Playgroud)

然后在命令行上,您可以传递如下数据:

salt 'SaltStack-01' state.sls group pillar='{"name": "awesome", "gid": "123456"}'
Run Code Online (Sandbox Code Playgroud)


Ala*_*Ali 6

您可以使用 Pillars 创建“字典”,您可以将其引用到状态文件中。我不确定我是否正确理解你,但这里有一个你可以做的例子:

  1. mkdir /srv/pillar/

  2. 创建/srv/pillar/groups.sls并粘贴如下内容:

    团体:
      第一个:1234
      第二名:5678
    

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

  3. 创建/srv/pillar/top.sls以便您可以将此支柱应用于您的仆从。这与 salt top 文件非常相似,因此您可以将其应用于所有 Minion ( '*') 或仅应用于一个 ( 'SaltStack-01'):

    根据:
      'hc01*':
        - 团体
    

    要测试它是否有效,您可以运行salt '*' pillar.items,您应该groups在输出中的某处找到支柱。

  4. 现在,您的/srv/salt/group.sls文件应如下所示:

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

    这是一个 for 循环:forevery groupand gidin the pillar groups,做剩下的。所以基本上,您可以将其视为状态文件运行两次:

    第一的:
      group.present:
        - gid:1234
    

    进而:

    第二:
      group.present:
        - gid:5678
    

这是从本指南中纳入的。


Hoh*_*eim 5

如果您不想使用Pillar,
您可以这样做:

# /srv/salt/params.yaml

name: awesome
gid: 123456
Run Code Online (Sandbox Code Playgroud)

进而:

# /srv/salt/groups.sls

{% import_yaml "params.yaml" as params %}

{{ params['name'] }}:
  group.present:
    - gid: {{ parmas['gid'] }}
    - system: True
Run Code Online (Sandbox Code Playgroud)

更多细节:文档