Puppet 2.7:更新父作用域中的哈希失败

时间:2016-08-30 22:53:01

标签: scope puppet

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

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

所以,问题是$config中的loop()包含a=>b,但在loop()之外它不包含for set_name in benchmark_sets.BENCHMARK_SETS 。我必须在这里碰到一些范围规则。

思想?

1 个答案:

答案 0 :(得分:0)

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

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

考虑编写自定义函数来执行计算并返回所需的哈希值。

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