Puppet 伪变量不变性
我想在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
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传递的任何内容呢?在我精心设计的演示场景中,应该这样做。