Regex 盐堆中的正则表达式匹配

Regex 盐堆中的正则表达式匹配,regex,puppet,salt-stack,Regex,Puppet,Salt Stack,我正在将一些模块从puppet重写为saltstack 在puppet中,我们可以使用节点来指定此部件用于此机器, 例如: node /william\d+.aws.dev/ { # some codes here.. } 但在saltstack中,它并没有那么优雅: {% if grains['fqdn'] == 'william.aws.dev' %} # some codes here.. {% endif %} 并且不支持正则表达式 有没有办法用更少的代码在saltstac

我正在将一些模块从puppet重写为saltstack

在puppet中,我们可以使用
节点
来指定此部件用于此机器, 例如:

node /william\d+.aws.dev/ {
  # some codes here.. 
}
但在saltstack中,它并没有那么优雅:

{% if grains['fqdn'] == 'william.aws.dev' %}
  # some codes here..
{% endif %}
并且不支持正则表达式

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


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

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

'*':
  - node.*

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

我仍然建议将SLSE分配给topfile中的节点,因为按照您现在的设置方式,每个节点都会得到
节点
目录下每个SLS的副本,使用SLSE自身编码的运行状态逻辑。考虑到您可以在
top.sls
中完成所有这些逻辑和与regex相关的匹配,这对我来说似乎有点混乱

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

好的,您只需使用
top.sls
即可获得此功能,同时保持其可管理的大小。似乎您的目的是让每个节点都获得自己的SLS文件,并将节点分配给与其
fqdn
匹配的SLS。如果是这种情况,那么看看这个示例
top.sls
,它是从

这将确保为具有grain
fqdn=williams.aws.dev
get的节点分配了
node.williams.aws.dev.sls
状态文件注意您的
匹配
此处可以使用salt允许的任何类型的正则表达式或复合匹配:

但如果没有sls名称,“node.williams.aws.dev.sls”将导致错误。因为我不需要所有节点都有sls文件。
{% set grain_fqdn = salt['grains.get']('fqdn', '') %}

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