更改哈希值不起作用

时间:2015-04-14 09:41:07

标签: manifest puppet

我的哈希如下:

$hash = {
  'somekey' => {
     online => true,
     date   => today
  }
}

我做一些随机检查来更改在线密钥的值。如果某些内容处于脱机状态,我想将该值更改为脱机。

我尝试了以下代码:

$::hash[somekey][online] = false

但这似乎不起作用。有什么办法可以改变网上的价值吗? :(

2 个答案:

答案 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

这将使用两个键创建一个哈希,并覆盖两个哈希中存在的任何键。它不会进行“深度”合并,因此如果您需要修改多个值,则需要合并该级别,然后合并更高级别。