更改哈希值不起作用

Changing hash value doesnt work

我的哈希如下:

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

我做了一些随机检查以更改在线密钥的值。如果有东西离线,我想将值更改为离线。

我尝试了以下代码:

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

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

puppet 的一个棘手部分是一切都是不可变的,包括您的散列和其他变量。这意味着 "modify" 值的唯一方法是将中间状态保存到新变量。

例如,您可以使用 puppetlabs-stdlibmerge 函数执行此操作:

$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'
  }
}

要么是这样,要么是将动态值存储在用于声明哈希值的变量中。