class mymodule::scripts::os_check {
case $operatingsystem {
/(?i-mx:centos)/: { notify("You are using CentOS")}
/(?i-mx:.*)/: { notify("You are using non-CentOS OS") }
}
}
为什么它运行时没有错误,但没有显示通知(在操作系统事实==CentOS的服务器上)?
我使用 puppet apply os-check.pp 将其作为独立脚本运行,并且只看到目录运行通知。
答案1
除了 Craig 的出色回答之外,您还需要:
包括 mymodule::scripts::os_check
编辑:否则,您只是定义一个类,而不是实例化它。
答案2
尝试这个:
class mymodule::scripts::os_check {
case $::operatingsystem {
'CentOS': {
notify {'You are using CentOS': }
}
default: {
notify {'You are using non-CentOS OS': }
}
}
}
以下列出几点(无特定顺序),并在适当的位置用括号括起来:
- 对于不包含变量插值的所有字符串,都应该使用单引号(Puppet Lint)。
- 当您知道实际值时,匹配实际值总是更好的——您尝试在正则表达式上进行匹配有什么特殊的原因吗?
- 事实
operatingsystem
应该通过使用顶级命名空间变量来匹配$::operatingsystem
(Puppet Lint) - 您应该始终为任何 case 语句提供默认选项 (Puppet Lint)
- 你的
notify
语法是错误的,你应该实例化一个通知资源而不是试图将其作为函数调用(傀儡类型参考)