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

标签 regex puppet salt-stack

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

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

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中添加一些节点时,我只需要在node目录下创建一个新文件。

最佳答案

我仍然建议将 SLS 分配给顶部文件中的节点,因为按照您现在设置的方式,每个节点都会在 node/ 目录下获得每个 SLS 的副本,其中运行状态的逻辑在 SLS 本身中进行编码。考虑到您可以在 top.sls 中执行所有这些逻辑和正则表达式相关的匹配,这对我来说似乎有点困惑。

everytime I add some node in salt, I just need to create a new file under the node directory.

好的,您只需使用 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 }}

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

关于regex - salt-stack 中的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27916765/

相关文章:

正则表达式递归 : Nth Subpatterns

regex - 正则表达式执行多次替换

C# 正则表达式使用匹配值替换

php - 如何使用正则表达式从 PHP 中的 UTF8 字符串中正确删除重复的空白字符?

vagrant - 直接从克隆的存储库使用 puppet 模块

salt-stack - salt 栈 : How I can copy file from minion to SaltStack File Server

salt-stack - 在 Master 上触发事件并在 Salt Minion 上等待 "response event"

puppet - 自动生成 puppet list ?

puppet - 在 puppet 中向自定义提供程序添加参数

amazon-web-services - 如何检查 AWS S3 同步是否有任何更改?