Puppet

Puppet 2.7 是否允許未參數化的“params”類的類繼承?

  • September 19, 2016

執行時出現以下錯誤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 Master 都是 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 {

您不直接將繼承的變數放在參數列表中;您將它們用作此類參數的預設值。

引用自:https://serverfault.com/questions/802243