Puppet 2.7 是否允许非参数化的“params”类的类继承?

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类即使 hiera 查找以某种方式失败也会提供参数,为什么我会收到此错误?
  2. 我必须使用糟糕的解决方法(即 puppet-lint.com 链接中的“你应该做什么”,即使我的 Puppet 版本高于2.6.2所有情况?

答案1

你的init.pp班级应该阅读:

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

您不能直接将继承的变量放在参数列表中;而是将它们用作此类参数的默认值。

相关内容