我想在已定义类型的实例中引用变量。例如,如何在栏$x
中引用foo $y
的a
和b
?
define foo($x, $y) {
}
define bar($foo) {
notify { "${::$foo::x}": } # <- how to make this reference work?
}
foo { 'a':
x => 'oh bar may you reference me',
y => 'please'
}
bar { 'b':
foo => Foo['a'],
require => Foo['a']
}
我之所以想这样做,是因为foo实例可能包含许多我不想对可能需要它们的每个资源重复的值。与其一遍又一遍地传递这些值,而不是重复我自己,我宁愿将引用传递给它们的容器。
我一直到处寻找并尝试了很多方法,但似乎无法在任何地方找到该问题的答案。我知道可以修改属性,引用资源并读取类属性,但是可以读取资源/定义类型的属性吗?如果不是,那么最好的解决方法是什么?
最佳答案
我实际上刚刚发现Puppetlab's stdlib module包含可用于解决此问题的getparam function。
所以这终于是我自己的问题的解决方案:
define foo($x, $y) {
}
define bar($foo) {
notify { getparam(Foo[$foo], 'x'): }
notify { getparam(Foo[$foo], 'y'): }
}
foo { 'a':
x => 'oh bar may you reference me',
y => 'please'
}
bar { 'b':
foo => 'a'
}
请注意,似乎不需要
require => Foo['a']
中的Bar['b']
。
关于puppet - 在Puppet中,如何访问已定义类型内的变量/属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013084/