在Puppet代码中,有没有一种方法可以在大小写中为正则表达式使用参数或变量

在Puppet代码中,有没有一种方法可以在大小写中为正则表达式使用参数或变量,puppet,puppet-enterprise,Puppet,Puppet Enterprise,在我的puppet代码中,我使用regex inside case语句来标识应用特定代码所需的节点 下面是我的Puppet类中的示例代码 case $os_family { 'RedHat': { case $node_certname { /(xyz|pqr\d+)\.(com|au)?/: { 由于上述正则表达式在我的课程的5月份重复出现,我希望集中声明它,这样我就不必更改所有课程,只需在中心位置更改即可 我试图传递变量,但它不起作用。如果可能的话,有人能

在我的puppet代码中,我使用regex inside case语句来标识应用特定代码所需的节点

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

case $os_family {
    'RedHat': {
     case $node_certname {
        /(xyz|pqr\d+)\.(com|au)?/: {
由于上述正则表达式在我的课程的5月份重复出现,我希望集中声明它,这样我就不必更改所有课程,只需在中心位置更改即可

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

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

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

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

在5.4中,请注意:

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

给定此示例类:

类测试(
$regex=/(xyz | pqr\d+)\(com | au)/
) {
$data='xyz.com'
案例$数据{
$regex:{
通知(“匹配”)
}
}
}
包括测试
这在Puppet>=5.4.0上运行良好:

▶ bundle-exec-puppet-V
5.5.0
▶ bundle exec puppet apply manifests/init.pp
注意:范围(类[测试]):匹配
注意:alexs-macbook-pro.local环境中产品的编译目录只需0.02秒
注意:0.01秒后应用目录
但是,它在早期版本上不起作用


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

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

在5.4中,请注意:

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

给定此示例类:

类测试(
$regex=/(xyz | pqr\d+)\(com | au)/
) {
$data='xyz.com'
案例$数据{
$regex:{
通知(“匹配”)
}
}
}
包括测试
这在Puppet>=5.4.0上运行良好:

▶ bundle-exec-puppet-V
5.5.0
▶ bundle exec puppet apply manifests/init.pp
注意:范围(类[测试]):匹配
注意:alexs-macbook-pro.local环境中产品的编译目录只需0.02秒
注意:0.01秒后应用目录
但是,它在早期版本上不起作用


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

不清楚您的要求。你是在问正则表达式是否是一种数据类型吗?你是在问正则表达式是否可以是变量吗?您是否在询问是否可以在类型别名中使用正则表达式?您是否在询问变量是否可以与正则表达式结合使用?请举例说明你正在尝试做什么以及结果。下面的答案是否解决了你的问题?不清楚你在问什么。你是在问正则表达式是否是一种数据类型吗?你是在问正则表达式是否可以是变量吗?您是否在询问是否可以在类型别名中使用正则表达式?您是否在询问变量是否可以与正则表达式结合使用?请举例说明你正在尝试做什么以及结果。下面的答案是否解决了你的问题?