Linux 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, 可选[注释]=>字符串, 可选[安全]=>布尔值, 可选[警

正在尝试在Puppet中的哈希数组中设置默认值。
我正在尝试配置要监视的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

如果没有通过任何其他方式指定其他值,则您提供的默认值将用作参数的(整)值。那不是你想要的。相反,您希望增加提供的值,这可以在函数体中执行,但不能在参数声明中执行。