在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作为一个独立的脚本运行,只是看到目录运行通知。

除了克雷格的出色答案外,您还需要:

包括mymodule :: scripts :: os_check

编辑:否则,你只是定义一个类,而不是实例化它。

尝试这个:

 class mymodule::scripts::os_check { case $::operatingsystem { 'CentOS': { notify {'You are using CentOS': } } default: { notify {'You are using non-CentOS OS': } } } } 

有几点,没有特别的顺序,在适当的地方用括号括起来:

  • 对于不包含可变插值( Puppet Lint )的所有string,您应该使用单引号。
  • 当你知道它们时,匹配实际值总是更好 – 你有什么特别的理由来试图在正则expression式上匹配吗?
  • operatingsystem事实应该通过使用顶层命名空间variables$::operatingsystem ( Puppet Lint )
  • 你应该总是提供任何情况下的默认选项( 木偶林特 )
  • 您的notify语法是错误的,您应该实例化通知资源,而不是尝试将其作为函数调用( Puppet Type Reference )