有没有办法在木偶代码中为案例内的正则表达式使用参数或变量



在我的木偶代码中,我在案例语句中使用正则表达式来识别我需要应用特定代码的节点

下面是我的木偶类中的示例代码

case $os_family {
    'RedHat': {
     case $node_certname {
        /(xyz|pqrd+).(com|au)?/: {

由于上述正则表达式在我的类的 5 月重复出现,我希望集中声明它,这样我就不必更改所有类,只需在中心位置进行更改即可

我试图传递变量,但它不起作用。如果可能的话,有人可以帮忙吗

我应该能够传递参数或替换为正则表达式的一些变量

/(xyz|pqrd+).(com|au)?/

我假设您有一个版本的Puppet <5.4,并且受到Puppet中错误的影响。

在 Puppet 5.4 中,发行说明指出:

以前版本的 Puppet 在与定义的资源类型、类或函数一起使用时过早地将"丰富"数据类型转换为字符串。例如,正则表达式将转换为字符串。Puppet 5.4.0 删除了转换,定义的类型、类和函数成为正则表达式、版本、版本范围、二进制、时间跨度和时间戳的实例,而不是值的字符串表示形式。

在这里给出这个示例类:

class test (
  $regex = /(xyz|pqrd+).(com|au)?/
  ) {
  $data = 'xyz.com'
  case $data {
    $regex: {
      notice("matches")
    }
  }
}
include test

这在木偶>= 5.4.0 上工作正常:

▶ bundle exec puppet -V                      
5.5.0
▶ bundle exec puppet apply manifests/init.pp                    
Notice: Scope(Class[Test]): matches
Notice: Compiled catalog for alexs-macbook-pro.local in environment production in 0.02 seconds
Notice: Applied catalog in 0.01 seconds

但是,它在早期版本上不起作用。

如果您升级到最新版本的Puppet 5(或6(,则可以避免此错误。

最新更新