我正在将一些模块从木偶重写为盐栈。
在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
目录下创建一个新文件。
答案 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/