木偶参数化类

我无法获得puppet 2.6.4(客户端和主服务器)中的参数化类,

######## from /etc/puppet/manifests/nodes.pp # defining one node to use certain version ####################################################### node 'dev-internal-000008.domain.com' { include software($version="dev-2011.02.11") } 

#来自/etc/puppet/modules/software/manifests/init.pp

我将这个版本设置为“默认”

 class software($version="dev-2011.02.04b") { File { links => follow } file { "/opt/software_AIR": ensure => directory } file { "/opt/software_AIR/share": source => "puppet://puppet/software/air/$version", recurse => "true", } } 

来自傀儡大师的错误

 err: Could not parse for environment production: Syntax error at '='; expected ')' at /etc/puppet/manifests/nodes.pp:10 on node dev-internal-domain.com 

find了一个解决这个问题

尝试

 node 'dev-internal-000008.domain.com' { class { customsoftware:version => "dev-2011.02.04b" } } 

不幸的是,参数化的类不能和include工作。 您必须使用与参数化类同时引入的新的替代类声明语法 :

 node 'dev-internal-000008.domain.com' { # include software($version="dev-2011.02.11") # (doesn't work) class {'software': version => "dev-2011.02.11", } # works } 

物联网:

  • 请注意,它看起来像一个资源( fileservice等)声明。
  • 定义和声明都是以class开头的事实是令人困惑的,但要小心,你会没事的。
  • 你不能以这种方式多次声明一个类,就像你可以使用include 。 这预计将在2.7中改变,并且可能会引入一些更友好的语法。

你也可以使用一个基于主机名的select器:

 class {'software': version => $::hostname ? { /hostname1/ => 'dev-2011.02.11', default => 'dev-2011.02.04b', }, }