Puppet 伪变量不变性

Puppet 伪变量不变性,puppet,Puppet,我想在puppet中使用一种语言模式,但我很难弄清楚如何实现它。假设我有一个参数化类: class ntp ( $ensure = 'present', $ntp_package_ensure = 'present', $ntp_package_name = 'ntp', $ntp_config_ensure = 'file', $ntp_config_path = '/etc/ntp.conf', $ntp_service_ensur

我想在puppet中使用一种语言模式,但我很难弄清楚如何实现它。假设我有一个参数化类:

class ntp (
  $ensure             = 'present',
  $ntp_package_ensure = 'present',
  $ntp_package_name   = 'ntp',
  $ntp_config_ensure  = 'file',
  $ntp_config_path    = '/etc/ntp.conf',
  $ntp_service_ensure = 'running',
  $ntp_service_enable = true,
  $ntp_service_name   = 'ntpd',
) {
我想说的是:

  if $ensure == 'absent' {
    $ntp_package_ensure = 'absent',
    $ntp_config_ensure  = 'absent',
    $ntp_service_ensure = 'stopped',
  }

但是因为木偶变量(常量?)是不可变的,所以我得到了语法错误。那么木偶是怎么做的呢?我现在看到的唯一解决方案是添加一个monolith if语句,将代码划分为一个Sure部分和一个else部分

最直接的解决方法是实际引入新的局部变量

case $ensure {
    'absent': {
        $my_ntp_package_ensure = 'absent'
        $my_ntp_config_ensure  = 'absent'
        $my_ntp_service_ensure = 'stopped'
    }
    'present': {
        ...
    }
    default: {
        $my_ntp_package_ensure = $ntp_package_ensure
        $my_ntp_config_ensure  = $ntp_config_ensure
        $my_ntp_service_ensure = $ntp_service_ensure
    }
}
然后只使用本地对应项,而不是正确的参数


我建议不要使用这种API设计,而是提出一个关于实际场景的新问题,以及如何更好地构造
ntp
模块。

那么
sure
参数是否应该否决用户作为
ntp\u package\u sure
和friends传递的任何内容呢?在我精心设计的演示场景中,应该这样做。