Назад | Перейти на главную страницу

Собирать и передавать произвольные параметры в Puppet

Есть ли способ (а) принять произвольные аргументы в определение класса или ресурса, а затем (б) передать эти аргументы другому определению класса или ресурса?

Я часто нахожу, что то, что я пишу, представляет собой тонкую оболочку над собственным типом или над сторонним модулем. Например:

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.