salt-stack中的正则表达式匹配

时间:2015-01-13 07:17:09

标签: regex puppet salt-stack

我正在将一些模块从木偶重写为盐栈。

在puppet中我们可以使用node来具体说明这部分是针对这台机器的, 例如:

node /william\d+.aws.dev/ {
  # some codes here.. 
}

但在盐栈中,它并不那么优雅:

{% if grains['fqdn'] == 'william.aws.dev' %}
  # some codes here..
{% endif %}

并且不支持正则表达式。

有没有办法用更少的代码在saltstack中重写它?


注意我不想使用top.sls来定义使用哪个sls的节点。因为它会使top.sls文件太大而无法维护。

我只想在top.sls中定义一个简单的两行:

'*':
  - node.*
每次我在salt中添加一些节点时,我只需要在node目录下创建一个新文件。

1 个答案:

答案 0 :(得分:1)

我仍然建议将SLS分配给topfile中的节点,只是因为你现在设置的方式,每个节点都获得了node/目录下每个SLS的副本,其逻辑为在SLS本身中编码运行的状态。考虑到您可以在top.sls中完成所有这些逻辑和正则表达式相关匹配,这对我来说似乎有点混乱。

  每次我在salt中添加一些节点时,我只需要在节点目录下创建一个新文件。

好的,您可以仅使用top.sls来获得此功能,同时仍将其保持在可管理的大小。您的意图似乎是让每个节点获得自己的SLS文件,并将节点分配给与fqdn匹配的SLS。如果是这种情况,请查看此示例top.sls,从salt grains documentation调整

{% set grain_fqdn = salt['grains.get']('fqdn', '') %}

base:
  'fqdn:{{ grain_fqdn }}':
      - match: grain  
      - node.{{ grain_fqdn }}

这将确保为粒度为fqdn = williams.aws.dev的节点分配node.williams.aws.dev.sls状态文件。 注意您的match此处可以使用盐允许的任何类型的正则表达式或复合匹配:http://docs.saltstack.com/en/latest/topics/targeting/