我想在已定义类型的实例中引用变量.例如,我可以做什么来引用$x和$yfoo 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的stdlib模块包含一个getparam函数,可以用来解决这个问题.
所以这里终于解决了我自己的问题:
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'].