我对 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