我想在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部分。
答案 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
模块。