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

时间:2019-06-18 15:26:38

标签: puppet puppet-enterprise

在我的人偶代码中,我在case语句中使用了regex来标识需要应用特定代码的节点

下面是我的Puppet类中的示例代码

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

由于上述正则表达式可能会在我的课程中重复出现,因此我希望集中声明它,这样我就不必更改所有课程,而只需在中心位置更改即可。

我试图传递变量,但是没有用。有人可以帮忙吗

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

/(xyz|pqr\d+)\.(com|au)?/

1 个答案:

答案 0 :(得分:0)

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

在Puppet 5.4中,release notes请注意:

  

以前的Puppet版本与定义的资源类型,类或函数一起使用时,过早将“丰富”数据类型转换为String。例如,正则表达式将转换为字符串。 Puppet 5.4.0删除了转换,并且定义的类型,类和函数成为Regexp,Version,VersionRange,Binary,Timespan和Timestamp的实例,而不是该值的String表示形式。

在此给出示例类:

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

include test

这在Puppet> = 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),则可以避免此错误。