puppet:包含带参数的模块

如何在inheritance节点默认的情况下使用参数包含模块。 可能吗?

现在,我已经删除了“inheritance默认值”,并将其更改为node server123 { //include that //include this } 。 但是,每当我对默认进行更改时,我将不得不对节点server123进行相同的更改。

我不知道是否应该改变ntp模块来解决这个问题?

文件: manifest/nodes.pp

 node default { include ssh include ntp ruby::install { "1.2.3-456": } nagios { "1.2.3-456": } } node 'server123' inherits default { class { 'ntp': ntpserver => 'true' } -> duplicate class defined error. ## I want to define "$ntpserver = 'true'" here, so it doesn't inherit ntp client config. ## I've tried other methods too, but none of them work. } 

文件: modules/ntp/init.pp

 class ntp ($ntpserver = "false") { //erb parameters } if $ntpserver == 'true' { //case $OS //code for ntpserver template } else { //case $OS //code for ntp.conf template } 

傀儡4不支持节点inheritance ,但是你使用“traits”类(或直接使用class{'something':} )重写你的代码。 你的例子可以被重写成:

 class base_node { include ssh include ntp ruby::install { "1.2.3-456": } nagios { "1.2.3-456": } } node /^server\d+/ { require base_node } 

更奇特的解决scheme可能会使用您的自定义模块,没有什么复杂的只是modules/base/manifests/linux.pp

 class base::linux { ... } 

更复杂的规则可以使用Hiera创build,其中节点定义非常简单:

 node /^server\d+/ { hiera_include('classes') } 

其余的逻辑在YAML层次结构中:

 # common.yaml --- classes: - ntp # Debian.yaml --- classes: - base::linux - localrepos::apt 

假设hiera.yaml有一些hiera.yaml

 :hierarchy: - "%{::fqdn}" - "%{::osfamily}" - common