Есть ли способ (а) принять произвольные аргументы в определение класса или ресурса, а затем (б) передать эти аргументы другому определению класса или ресурса?
Я часто нахожу, что то, что я пишу, представляет собой тонкую оболочку над собственным типом или над сторонним модулем. Например:
define myconfigfile {
file { "/path/to/$name":
owner => lars,
group => lars,
...
}
}
То есть, myconfigfile
эффективно сокращает набор файловых ресурсов с известным префиксом. Я бы действительно хотел myconfigfile
принять те же параметры, что и file
тип ресурса (например, content
, source
и т. д.), но я бы хотел избежать:
define myconfigfile (
$content = undef,
$source = undef
) {
...
}
Это нормально работает, когда есть только один или два параметра, но становится неуправляемым, если я пытаюсь обернуть параметризованный класс большим количеством параметров.
Одна из возможностей - использовать хэш передать произвольный список параметров.
Другой и, возможно, лучший вариант - использовать Рубиновый DSL что позволяет использовать Ruby вместо языка Puppet.
Есть множество Примеры также доступны.
По сути, вы должны передать хэш-карту, а затем использовать итерацию / цикл Ruby (рубин хэш-объект имеет метод .each) для извлечения пар ключ-значение из хеша.
Ruby DSL стал доступен в версии 2.6.x.