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版本太旧了。
我需要根据某种逻辑递归地将条目插入到哈希中。散列的状态在定义的类型循环内更新,但不在外部范围内更新。以下内容应澄清:
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版本太旧了。