木偶变量不变性

时间:2014-05-15 18:36:27

标签: 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_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语句,将代码分区为ensure部分和else部分。

1 个答案:

答案 0 :(得分:2)

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

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模块。