2014-05-15 101 views
1

我想在傀儡中使用一種語言模式,並且在解決如何實現它時遇到困難。比方說,我有一個參數化類:木偶變量不變性

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', 
    } 

但由於傀儡變量(常量?)是不可變的我得到的語法錯誤。那麼木偶是怎麼做的呢?我現在可以看到的唯一解決方案是添加一個巨大的if語句,將代碼劃分爲確保段和其他段。

+0

所以應該''確保'參數否決任何用戶通過'ntp_package_ensure'和朋友? –

+0

在我非常有人氣的演示場景中,它應該。 – AlexLordThorsen

回答

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