Warum ist die Variable nicht verfügbar?

Warum ist die Variable nicht verfügbar?

Hintergrund

ich möchte mich bewerbenDasIdee, einen Kurs zu haben common, der alle spezifischen Informationen zu meinem Setup enthält.

So habe ich erstellt /etc/puppet/modules/common/manifests/init.ppmit

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

und installiertDasntp-Modul und habe einen Knoten wie folgt erstellt

node testip {
  include myconfig::ntpp
}

Problem

/etc/puppet/modules/myconfig/manifests/init.ppenthält

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

und ich hätte erwartet, dass das $ntpServerListverfügbar wäre, aber es ist nicht verfügbar. Der Fehler ist

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

Frage

Kann irgendjemand herausfinden, was mit meiner myconfig::ntppKlasse nicht stimmt?

Antwort1

Sie müssen Ihre Variablen vollständig qualifizieren; $common::data::ntpServerList.

So wie die Dinge liegen, sucht Ihr Code nach einer Variable, die ntpServerListim lokalen Bereich ( $myconfig::ntpp::ntpServerList) aufgerufen wird, aber nicht existiert. Deshalb greift er auf den obersten Bereich ( $::ntpServerList) zurück, wo sie ebenfalls nicht existiert.

SehenHierfür mehr Details.

verwandte Informationen