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

Допускает ли Puppet 2.7 наследование класса без параметров класса «params»?

При запуске появляется следующая ошибка puppet-lint:

$ puppet-lint manifests/*
manifests/init.pp - WARNING: class inheriting from params class on line 72

Я быстро поискал на duckduckgo.com и получил следующее:

http://puppet-lint.com/checks/class_inherits_from_params_class/

Однако все наши версии Puppet Agent - 2.7 или новее, а наши Puppet Masters - все 3.0 или новее.

Для справки: init.pp код, о котором идет речь:

class myclass (
    $zone = 'top',
    $::myclass::params::base_url,
    $::myclass::params::username,
) inherits myclass::params {
...

Код в params.pp как следует:

class myclass::params {
    $base_url  = hiera('myclass::base_url','https://beta.tpsreports.com/coversheets/')
    $username = hiera('clap::base_url','prod')
}

Даже если поиск Hiera завершится неудачно, я все равно не получу таких ошибок:

err: Could not retrieve catalog from remote server: Error 400 on SERVER: Must pass ::myclass::params::base_url to Class[Myclass] at /etc/puppet/manifests/nodes/beta_servers_0.pp:126 on node beta-web-server-0.tpsreports.com

Теперь, когда я рассмотрел некоторые из этих предысторий, к которым я более чем готов добавить, если кто-нибудь спросит, мои вопросы следуют:

  1. Если мой params class предоставит параметры, даже если поиск по hiera каким-то образом не удался, почему я получаю эту ошибку?
  2. Я должен использовать ужасный обходной путь (то есть "Что вы должны были сделать" по ссылке puppet-lint.com, хотя у меня версия Puppet выше, чем 2.6.2 во всех случаях?

Ваш init.pp класс следует читать:

class myclass (
    $zone = 'top',
    $base_url = $::myclass::params::base_url,
    $username = $::myclass::params::username,
) inherits myclass::params {

Вы не помещаете унаследованные переменные напрямую в свой список параметров; вы используете их как значения по умолчанию для параметров этого класса.