Puppet 2.7是否允许未参数化的“params”类的类inheritance?

运行puppet-lint时出现以下错误:

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

我自己在duckduckgo.com上快速search,得到这个:

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

然而,我们的木偶代理版本都是2.7或更高版本,我们的木偶大师都是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类将提供参数,即使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 { 

您不直接将inheritance的variables放在参数列表中; 你使用它们作为这个类的参数的默认值。