更改哈希值不起作用
Changing hash value doesnt work
我的哈希如下:
$hash = {
'somekey' => {
online => true,
date => today
}
}
我做了一些随机检查以更改在线密钥的值。如果有东西离线,我想将值更改为离线。
我尝试了以下代码:
$::hash[somekey][online] = false
但这似乎不起作用。有什么办法可以改变在线的价值吗? :(
puppet 的一个棘手部分是一切都是不可变的,包括您的散列和其他变量。这意味着 "modify" 值的唯一方法是将中间状态保存到新变量。
例如,您可以使用 puppetlabs-stdlib
的 merge
函数执行此操作:
$hash_original = {
'somekey' => {
online => true,
date => today
}
}
$hash_updated = merge($hash_original, {'someotherkey' => 5})
这将使用这两个键创建一个散列,并覆盖两个散列中存在的任何键。它不会进行 "deep" 合并,因此如果您需要向下修改多个值,则需要合并该级别,然后合并更高级别。
如果可能的话,重组你的清单。
在大多数编程语言中,您将使用像
这样的结构
$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'
}
}
要么是这样,要么是将动态值存储在用于声明哈希值的变量中。
我的哈希如下:
$hash = {
'somekey' => {
online => true,
date => today
}
}
我做了一些随机检查以更改在线密钥的值。如果有东西离线,我想将值更改为离线。
我尝试了以下代码:
$::hash[somekey][online] = false
但这似乎不起作用。有什么办法可以改变在线的价值吗? :(
puppet 的一个棘手部分是一切都是不可变的,包括您的散列和其他变量。这意味着 "modify" 值的唯一方法是将中间状态保存到新变量。
例如,您可以使用 puppetlabs-stdlib
的 merge
函数执行此操作:
$hash_original = {
'somekey' => {
online => true,
date => today
}
}
$hash_updated = merge($hash_original, {'someotherkey' => 5})
这将使用这两个键创建一个散列,并覆盖两个散列中存在的任何键。它不会进行 "deep" 合并,因此如果您需要向下修改多个值,则需要合并该级别,然后合并更高级别。
如果可能的话,重组你的清单。
在大多数编程语言中,您将使用像
这样的结构$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'
}
}
要么是这样,要么是将动态值存储在用于声明哈希值的变量中。