我的哈希如下:
$hash = {
'somekey' => {
online => true,
date => today
}
}
我做一些随机检查来更改在线密钥的值。如果某些内容处于脱机状态,我想将该值更改为脱机。
我尝试了以下代码:
$::hash[somekey][online] = false
但这似乎不起作用。有什么办法可以改变网上的价值吗? :(
答案 0 :(得分:2)
如果可能的话,重组你的清单。
在大多数编程语言中,您将使用
之类的结构$variable = default-value
if ( condition ) {
$variable = another-value
}
然而,以下结构更适合Puppet的编程范例。
if ( condition ) {
$variable = another-value
}
else {
$variable = default-value
}
对于复杂的哈希,你可能会选择表达式。
$hash = {
'somekey' => {
'status' => $condition ? {
'special-case' => 'offline',
default => 'online',
'date' => 'today'
}
}
或者是,或者将动态值存储在哈希值声明中使用的变量中。
答案 1 :(得分:1)
puppet的一个棘手部分是一切都是不可变的,包括你的哈希和其他变量。这意味着“修改”值的唯一方法是将中间状态保存到新变量。
例如,您可以使用puppetlabs-stdlib
的{{1}}函数执行此操作:
merge
这将使用两个键创建一个哈希,并覆盖两个哈希中存在的任何键。它不会进行“深度”合并,因此如果您需要修改多个值,则需要合并该级别,然后合并更高级别。