puppet: Incluir módulo com parâmetros

4

Como posso incluir módulo com parâmetros ao herdar o padrão do nó. É possível?

Por enquanto, removi "inherits default" e alterei para node server123 { //include that //include this } . Mas sempre que eu fizer alterações no padrão, terei que fazer a mesma alteração no nó server123 .

Gostaria de saber se devo mudar o módulo ntp para solucionar isso?

Arquivo: 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.
}

Arquivo: 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  
}
    
por poppey 16.11.2016 / 07:29

1 resposta

1

O Puppet 4 não suporta a herança de nós , mas você reescreve seu código usando classes "traits" (ou usando diretamente class{'something':} ). Seu exemplo poderia ser reescrito em:

class base_node {
  include ssh 
  include ntp
  ruby::install { "1.2.3-456": } 
  nagios { "1.2.3-456": }
}

node /^server\d+/ {
  require base_node
}

Mais solução sofisticada pode usar seu módulo personalizado, nada complicado apenas modules/base/manifests/linux.pp :

class base::linux {
  ...
}

Regras ainda mais complexas podem ser criadas usando o Hiera, onde a definição do nó é muito simples:

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

e o restante da lógica está na hierarquia YAML:

# common.yaml
---
classes:
  - ntp

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

assumindo alguma hierarquia em hiera.yaml :

:hierarchy:
  - "%{::fqdn}"
  - "%{::osfamily}"
  - common
    
por 21.02.2017 / 14:58

Tags