我如何从类定义中提取puppet虚拟资源声明?

我有一个关于傀儡虚拟资源的问题。 如果我有:

class foo::virtual { define foo () { custom_resource { $name: <attributes>, } } @foo { '1st_foo': <attributes>, } } 

我可以在节点声明中realize(Foo::Virtual::Foo['1st_foo'])

不过,我想将每个虚拟foo的规范提取到一个单独的位置,除了foo :: virtual类的定义和定义foo()。

通过类比,我有一个名为common :: data的类,它为各种variables提供默认值:

  class common::data { $barList = [ 'a','b','z'] } 

有什么办法可以在common :: data中声明@foo { '2nd_foo': }吗? 然后在节点声明中引用?

是的,您可以使用在创build类的外部定义的类,但可能需要包含类以确保首先parsing定义,并且单个资源的名称基于define所在的类,而不是class级被称为。

这是一个完整的工作testing示例(在使用puppet apply和正确节点名称的CLI上进行testing):

 class foo::virtual { define foo() { notify { "test${title}": message => "realized foo ${title}" } } @foo { '1st_foo': } } class common::data { include foo::virtual @foo::virtual::foo { '2nd_foo': } } node default { include common::data realize(Foo::Virtual::Foo['1st_foo']) realize(Foo::Virtual::Foo['2nd_foo']) } 

输出确认两者都发生:

 notice: realized foo 1st_foo notice: realized foo 2nd_foo