在我的人偶代码中,我在case语句中使用了regex来标识需要应用特定代码的节点
下面是我的Puppet类中的示例代码
case $os_family {
'RedHat': {
case $node_certname {
/(xyz|pqr\d+)\.(com|au)?/: {
由于上述正则表达式可能会在我的课程中重复出现,因此我希望集中声明它,这样我就不必更改所有课程,而只需在中心位置更改即可。
我试图传递变量,但是没有用。有人可以帮忙吗
我应该能够传递参数或用正则表达式的某些变量替换
/(xyz|pqr\d+)\.(com|au)?/
答案 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),则可以避免此错误。