Сложная структура со значениями по умолчанию в Puppet
Попытка установить значения по умолчанию в массиве хэшей в Puppet.
Я пытаюсь настроить URL-адреса для отслеживания.
Он должен содержать:
- url
- название
- Runbook
- комментарий [необязательно]
- безопасный [по умолчанию =true]
- предупреждение [по умолчанию =30]
- критический [по умолчанию =15]
Получился такой код:
puppet apply test.pp
test.pp:
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,
}]
){
$checks.each | Hash $check | {
notify {"${check}":}
}
}
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
Результаты в:
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
1 ответ
Решение
Попробуй это:
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