Linux Puppet中具有默认值的复杂结构
正在尝试在Puppet中的哈希数组中设置默认值。Linux Puppet中具有默认值的复杂结构,linux,puppet,Linux,Puppet,正在尝试在Puppet中的哈希数组中设置默认值。 我正在尝试配置要监视的URL。 它应包括: 网址 名字 运行手册 评论[可选] 安全[default=true] 警告[默认值=30] 临界[默认值=15] 我得到了以下代码: puppet apply test.pp test.pp: class-http\u监控( 数组[Struct][{ url=>String, name=>String, runbook=>String, 可选[注释]=>字符串, 可选[安全]=>布尔值, 可选[警
我正在尝试配置要监视的URL。
它应包括:
- 网址
- 名字
- 运行手册
- 评论[可选]
- 安全[default=true]
- 警告[默认值=30]
- 临界[默认值=15]
puppet apply test.pp
test.pp:
class-http\u监控(
数组[Struct][{
url=>String,
name=>String,
runbook=>String,
可选[注释]=>字符串,
可选[安全]=>布尔值,
可选[警告]=>整数,
可选[临界]=>整数,
}]]
美元支票=[{
安全=>正确,
警告=>30,
临界=>15,
}]
){
$checks.each |散列$check |{
通知{${check}”:
}
}
班级网站{
类{“http_监视”:
支票=>[
{url=>'https://example.com'示例',runbook=>'https://link-to-docs.com/'},
{url=>'https://example2.com'名称=>'示例2',运行手册=>'https://link-to-docs.com/,警告=>5,严重=>10},
]
}
}
包括网站
结果:
Notice: {url => https://example.com, name => example, runbook => https://link-to-docs.com/}
Notice: /Stage[main]/Http_monitoring/Notify[{url => https://example.com, name => example, runbook => https://link-to-docs.com/}]/message: defined 'message' as '{url => https://example.com, name => example, runbook => https://link-to-docs.com/}'
Notice: {url => https://example2.com, name => example2, runbook => https://link-to-docs.com/, warning => 5, critical => 10}
Notice: /Stage[main]/Http_monitoring/Notify[{url => https://example2.com, name => example2, runbook => https://link-to-docs.com/, warning => 5, critical => 10}]/message: defined 'message' as '{url => https://example2.com, name => example2, runbook => https://link-to-docs.com/, warning => 5, critical => 10}'
Notice: Applied catalog in 0.01 seconds
我希望得到的结果是:
{url => 'https://example.com', name => example, runbook => https://link-to-docs.com/, secure => true, warning => 30, critical => 15}
{url => 'https://example2.com', name => 'example2', runbook => 'https://link-to-docs.com/', warning => 5, critical => 10, secure => true}
运行Puppet 6.12.0尝试以下操作:
class http_monitoring (
Array[Struct[{
url => String,
name => String,
runbook => String,
Optional[comment] => String,
Optional[secure] => Boolean,
Optional[warning] => Integer,
Optional[critical] => Integer,
}]]
$checks = [{
secure => true,
warning => 30,
critical => 15,
}]
){
$check_defaults = {
secure => true,
warning => 30,
critical => 15,
}
# Checks with defaults
$checks_with_defaults_added = $checks.map | Hash $next_check | {
$check_defaults + $next_check
}
# $checks.each | Hash $check | {
# notify {"${check}":}
# }
$checks_with_defaults_added.each | Hash $check | {
$check_output = String($check)
notify { $check_output: }
}
}
class website {
class { 'http_monitoring':
checks => [
{url => 'https://example.com', name => 'example' ,runbook => 'https://link-to-docs.com/'},
{url => 'https://example2.com', name => 'example2' ,runbook => 'https://link-to-docs.com/', warning => 5, critical => 10},
]
}
}
include website
如果没有通过任何其他方式指定其他值,则您提供的默认值将用作参数的(整)值。那不是你想要的。相反,您希望增加提供的值,这可以在函数体中执行,但不能在参数声明中执行。