Puppet 2.7:更新父作用域中的散列失败

Puppet 2.7: Updating hash in the parent scope fails

我需要根据某种逻辑递归地将条目插入到哈希中。散列的状态在定义的类型循环内更新,但不在外部范围内更新。以下内容应澄清:

class Test {
  $config = {}
  define my_loop()
  {
     $config['a'] = 'b'
     notify { "1) config = $config": } # shows that $config has a=>b
  }

  my_loop { 'loop' : }
  notify { "2) config = $config":
    require => My_loop['loop'] # shows that $config is empty
  }
}

因此,问题是 loop() 内部的 $config 包含 a=>b,但 loop() 外部则不包含。我一定是在这里遇到了一些范围规则。

想法?

Puppet变量的值设置一次,之后就不会改变。在那些表现出不同行为外观的少数地方,实际发生的是创建修改后的本地副本或创建完全独立的变量。

此外,不要在 classes 中嵌套 classes 或定义的类型。由于历史原因,Puppet 允许使用它,但它没有您可能期望的语义,并且它使嵌套的 class / 类型很难找到。

考虑编写一个自定义函数来执行您的计算和return所需的哈希。

还要考虑升级到支持的 Puppet 版本是否可行。 2.7版本太旧了。