通过hiera中的数据自动创建需要参数
auto-create require parameters by data in hiera
有没有办法通过hiera创建require参数?也许可以查找,但我是 puppet 的新手,不知道所有的可能性。
我正在使用 oneview-puppet 模块从 puppet apply 创建资源。
资源由 hiera 创建,定义为一个配置文件 (YAML)。我在那里结合了上面模块中的几个资源。这些资源具有复杂的依赖关系。可以找到概述 here(第 29 页)。
因此,对于每个资源,我都必须要求依赖项,尽管它可以 "found" 在我的配置文件中。实际上,它仅在 site/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']
Is there a way to create the require parameter by hiera?
是的。
I've tried to add the require parameter in hiera, but there it will be interpreted as a string.
如果格式正确则不会。如果您查看已编译的 Puppet 目录,您可以看到资源引用是如何在 JSON 目录中编码的,这也告诉您它们需要如何在 Hiera YAML 文件中编码。
采取这样的清单:
class test {
notify { 'notify1':
message => 'I am notify 1',
require => Notify['notify2'],
}
notify { 'notify2':
'message' => 'I am notify 2',
}
}
现在 compile 该目录并查看其中内容。你会看到:
{
"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 中的资源引用可能是您有太多 data/code 耦合的线索。
有没有办法通过hiera创建require参数?也许可以查找,但我是 puppet 的新手,不知道所有的可能性。
我正在使用 oneview-puppet 模块从 puppet apply 创建资源。
资源由 hiera 创建,定义为一个配置文件 (YAML)。我在那里结合了上面模块中的几个资源。这些资源具有复杂的依赖关系。可以找到概述 here(第 29 页)。
因此,对于每个资源,我都必须要求依赖项,尽管它可以 "found" 在我的配置文件中。实际上,它仅在 site/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']
Is there a way to create the require parameter by hiera?
是的。
I've tried to add the require parameter in hiera, but there it will be interpreted as a string.
如果格式正确则不会。如果您查看已编译的 Puppet 目录,您可以看到资源引用是如何在 JSON 目录中编码的,这也告诉您它们需要如何在 Hiera YAML 文件中编码。
采取这样的清单:
class test {
notify { 'notify1':
message => 'I am notify 1',
require => Notify['notify2'],
}
notify { 'notify2':
'message' => 'I am notify 2',
}
}
现在 compile 该目录并查看其中内容。你会看到:
{
"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 中的资源引用可能是您有太多 data/code 耦合的线索。