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

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

我对 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 的类,它为各种变量提供默认值:

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

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

答案1

是的,您可以在创建该定义所在的类之外使用该定义,但是您可能需要包含该类以确保首先解析该定义,并且单个资源的名称基于该定义所在的类,而不是调用该类的位置。

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

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

相关内容