Regex 盐堆中的正则表达式匹配
我正在将一些模块从puppet重写为saltstack 在puppet中,我们可以使用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
节点
来指定此部件用于此机器,
例如:
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
,它是从
这将确保为具有grainfqdn=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 }}