在Puppet中,如何在定义的类型中访问变量/属性?

Lod*_*rds 6 puppet

我想在已定义类型的实例中引用变量.例如,我可以做什么来引用$x$yfoo ab

 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']
  }
Run Code Online (Sandbox Code Playgroud)

我希望这个工作的原因是foo实例可能包含许多值,我不想重复这些值可能需要它们的每个资源.我不是一次又一次地传递这些值,而是重复自己,而是将参考传递给他们的容器.

我一直在寻找并尝试了很多东西,但似乎无法在任何地方找到这个问题的答案.我知道可以修改属性,引用资源和读取类属性,但是是否可以读取资源/定义类型的属性?如果不是那么最好的工作呢?

Lod*_*rds 8

我实际上刚刚发现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'
}
Run Code Online (Sandbox Code Playgroud)

请注意,似乎不需要require => Foo['a']定义中的内容Bar['b'].