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

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

我在让 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",
  }
}
#

Puppet Master 的错误

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

找到了解决办法

尝试

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

答案1

不幸的是,参数化类不适用于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 中会有所改变,并且可能会引入一些更友好的语法。

答案2

您还可以使用基于主机名的选择器:

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

相关内容