我运行时出现以下错误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
现在我已经详细讨论了部分背景知识,如果有人问起,我非常愿意补充,我的问题如下:
- 如果我的
params
类即使 hiera 查找以某种方式失败也会提供参数,为什么我会收到此错误? - 我必须使用糟糕的解决方法(即 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 {
您不能直接将继承的变量放在参数列表中;而是将它们用作此类参数的默认值。