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

2024-06-07 05:49:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用salt状态文件创建一个组和用户,但在需要执行salt状态文件(我想作为参数传入)之前,我不知道组、gid、user、uid、sshkey。

我已经读过创建变量的Pillar。如何在执行前创建支柱?

/srv/salt/group.sls

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

命令行:

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

Tags: 文件用户nameuid参数状态groupsalt
3条回答

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

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

然后在命令行上,您可以这样传入数据:

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

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

  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 %}
    

    这是一个for循环:forgroupgid在支柱groups中,执行其余操作。因此,基本上,可以将其视为状态文件正在运行两次:

    first:
      group.present:
        - gid: 1234
    

    然后:

    second:
      group.present:
        - gid: 5678
    

这是从this guide合并而来的。

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

相关问题 更多 >