Scripting
具有整數範圍的 Puppet case 語句
我需要使用一些範圍編寫一個案例,以便以更好的方式編寫如下意大利麵條程式碼:
if $mem < 1024 { $retvalue = "128M" } elsif $mem < 7000 { $retvalue = "160M" } elsif $mem < 15000 { $retvalue = "192M" } elsif $mem < 31000 { $retvalue = "256M" } else { $retvalue = "512M" }
是否可以通過使用範圍函式(在 stdlib 上)或比這更好的東西來使用 case 語句?
BR
朱塞佩
對於這種大小的範圍,我建議不要創建範圍(即,用於掃描的充滿整數值的數組)。
你的方法是可靠的。如果你真的想要一個 case 語句,你可以選擇一段 Ruby 程式碼和
inline_template
函式,但這會降低性能並且不會增加可維護性。
Puppet 的
case
語句可以評估表達式,並將執行與第一個匹配案例相關聯的第一個。它不太支持這一點:
case $mem { 0..1023: { $retvalue = "128M" } 1024..6999: { $retvalue = "160M" } 7000...14999: { $retvalue = "192M" } 15000..30999: { $retvalue = "256M" } default: { $retvalue = "512M" } }
但是,您可以給它表達式並告訴它匹配第一個
true
.所以你可以這樣做:
case true { $mem < 1024: { $retvalue = "128M" } $mem < 7000: { $retvalue = "160M" } $mem < 15000: { $retvalue = "192M" } $mem < 31000: { $retvalue = "256M" } default: { $retvalue = "512M" } }
同樣,您可以使用選擇器返回正確的值:
$retvalue = true ? { $mem < 1024 => "128M", $mem < 7000 => "160M", $mem < 15000 => "192M", $mem < 31000 => "256M", default => "512M", }