puppet:包含带参数的模块

puppet:包含带参数的模块

如何在继承节点默认值时包含带参数的模块。这可能吗?

目前,我已删除“继承默认值”并将其更改为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  
}

答案1

Puppet 4 不支持节点继承,但是您可以使用“特征”类(或直接使用)重写代码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
}

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

class base::linux {
  ...
}

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

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

其余逻辑位于 YAML 层次结构中:

# common.yaml
---
classes:
  - ntp

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

假设存在一些层次结构hiera.yaml

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

相关内容