Есть ли способ создать параметр require с помощью hiera?
Да.
Я пытался добавить параметр require в hiera,но там это будет интерпретироваться как строка.
Нет, если вы правильно отформатируете ее.Если вы посмотрите на скомпилированный каталог Puppet, то увидите, как ссылки на ресурсы кодируются в каталоге JSON, и это также говорит о том, как их нужно кодировать в файл HAMER 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 таким же образом и выполнить рефакторинг всего этого следующим образом.
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 }
}
}
Должны ли вы сделать это, хотя?Я склонен согласиться с комментариями Джона Боллинджера о том, что ссылки на ресурсы в Hiera могут указывать на то, что у вас слишком много данных / кода.