Linux

為什麼變數不可用?

  • August 24, 2012

背景

我想應用這個想法,即擁有一個common包含有關我的設置的所有特定資訊的類。

所以我創造/etc/puppet/modules/common/manifests/init.pp

class common { include common::data }
class common::data { $ntpServerList = [ 'ntp51.ex.com','ntp3.ex.com' ] }

並安裝了這個ntp 模組並創建了一個像這樣的節點

node testip {
 include myconfig::ntpp
}

問題

/etc/puppet/modules/myconfig/manifests/init.pp包含

class myconfig::ntpp {
 include common
 class {'ntp':
     server_list => $ntpServerList
#          server_list => ['ntp.ex.com']    # this works
 }
}

我本來預計$ntpServerList會可用,但事實並非如此。錯誤是

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Failed to parse template ntp/ntp.conf.erb:
 Filepath: /usr/lib/ruby/site_ruby/1.8/puppet/parser/templatewrapper.rb
 Line: 64
 Detail: Could not find value for 'server_list' at /etc/puppet/modules/ntp/templates/ntp.conf.erb:25
at /etc/puppet/modules/ntp/manifests/init.pp:183 on node testip

問題

誰能弄清楚我的myconfig::ntpp課有什麼問題?

您需要完全限定您的變數;$common::data::ntpServerList.

實際上,您的程式碼正在尋找ntpServerList在本地範圍 ( $myconfig::ntpp::ntpServerList) 中呼叫的不存在的變數,因此它回退到也不存在的頂級範圍 ( $::ntpServerList) 中。

有關更多詳細資訊,請參見此處

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