我有Puppet class Foo和一个包含Hiera设置的关联Foo.yaml文件。我需要创建一个后代类(Bar(,其中包括Foo的所有设置和代码以及一些额外的Hiera设置。
是否足以在 Bar 类定义中使用"include Foo"并使用额外设置创建 Bar.yaml?或者我应该另外将Foo.yaml复制到Bar.yaml并向Bar.yaml添加新设置?前一种方法更可取,但我不确定它会起作用。
执行require
或include
以包含来自另一个类的所有资源就足够了(如果要确保顺序,请使用require
(。但是这样,您将无法从其他类访问 hiera 设置。为此,我建议在类 Bar 中进行 hiera 查找,例如
class Bar (
$param1 = lookup("Foo::param1")
) {
// code
}
我已经对木偶类进行了实际实验。不幸的是,Hiera 似乎不会导入与包含的角色关联的设置。它仅从与当前角色关联的文件中导入设置。
因此,除非您要基于每个服务器添加新设置,否则只有一种解决方案:将源 Hiera 文件的内容复制到新文件中并在其中添加所需的设置。之后,您必须手动同步 Hiera 中父角色设置和降序角色设置中的所有新设置。
我想知道为什么木偶创作者决定发明一辆自行车并从头开始开发对面向对象的风格的模仿,而不是采用众所周知和经过验证的方法......