在 Puppet 中使用带有通知的 case 语句

在 Puppet 中使用带有通知的 case 语句
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应该通过使用顶级命名空间变量来匹配$::operatingsystemPuppet Lint
  • 您应该始终为任何 case 语句提供默认选项 (Puppet Lint
  • 你的notify语法是错误的,你应该实例化一个通知资源而不是试图将其作为函数调用(傀儡类型参考

相关内容