有没有办法通过hiera创建require参数?也许可以查找,但我是木偶的新手,不知道所有的可能性。
我正在使用 oneview-puppet 模块从 puppet 应用程序创建资源。
资源由定义为一个配置文件 (YAML( 的 hiera 创建。在那里,我正在结合上面模块中的几个资源。这些资源具有复杂的依赖关系。概述可以在这里找到(第29页(。
因此,对于每个资源,我都必须要求依赖项,尽管它可以在我的配置文件中"找到"。实际上,它仅在站点/manifest/init.pp中的序列中创建的资源时才有效。
我试图在 hiera 中添加 require 参数表,但它会被解释为一个字符串。
site/oneviewconf/manifest/init.pp 示例:
class oneviewconf (
Hash $oneview_ethernet_networks = {},
Hash $oneview_logical_interconnect_groups = {}
)
{
$oneview_ethernet_networks.each | $k,$v | {
oneview_ethernet_network { $k: # -> oneview-puppet resource
* => $v,
}
}
$oneview_logical_interconnect_groups.each | $k,$v | {
oneview_logical_interconnect_group { $k: # -> oneview-puppet resource
require => Oneview_ethernet_network['VLAN0001']
* => $v,
}
}
}
Hiera 示例:
---
oneviewconf::oneview_ethernet_networks:
VLAN0001:
ensure: present
data:
name: 'VLAN0001'
vlanId: 0001
oneviewconf::oneview_logical_interconnect_groups:
LIG_A:
ensure: present
data:
name: 'LIG_A'
networkUris: ['VLAN0001']
有没有办法通过 hiera 创建 require 参数?
是的。
我尝试在 hiera 中添加 require 参数,但它会被解释为字符串。
如果格式正确,则不会。如果您查看编译的 Puppet 目录,您可以看到资源引用如何在 JSON 目录中编码,这也告诉您如何在 Hiera YAML 文件中对它们进行编码。
像这样拿一个清单:
class test {
notify { 'notify1':
message => 'I am notify 1',
require => Notify['notify2'],
}
notify { 'notify2':
'message' => 'I am notify 2',
}
}
现在编译该目录并查看其中。您将看到:
{
"type": "Notify",
"title": "notify1",
...
"parameters": {
"message": "I am notify 1",
"require": "Notify[notify2]"
}
},
如果这不明显,而清单要求引用资源标题,例如Notify['notify2']
资源标题周围的引号在目录中被删除并变为Notify[notify2]
。
因此,我可以以相同的方式向 Hiera 添加一个参数,并像这样重构整个事情。
希拉:
---
notify_resources:
notify1:
message: I am notify 1
require: Notify[notify2]
notify2:
message: I am notify 2
体现:
class test {
$notify_resources = lookup('notify_resources')
$notify_resources.each |$k,$v| {
notify { $k: * => $v }
}
}
你应该这样做吗?我倾向于同意John Bollinger的评论,即Hiera中的资源引用可能是您有太多数据/代码耦合的线索。