Pregunta ¿Cómo pasar parámetros a los módulos de títeres?


¿Cuál es la mejor práctica para la configuración de módulos de títeres? Tengo marioneta 2.7.11. De esta manera me parece bastante desordenado, parece que se usan variables globales.

node default {
   $always_apt_update = true
   include apt
}

¿Debo crear una clase que heredaría la mayor parte de la configuración del original? La documentación parece tener demasiadas versiones y no estoy seguro de cuál se aplica a mí.

ACTUALIZAR:

cuando intento esto:

  class { 'apt': 
    always_update => 'true',
  } 

Me sale un error:

Error 400 on SERVER: Invalid parameter always_update at /etc/puppet/manifests/nodes.pp:32

5
2018-03-07 09:53


origen




Respuestas:


Debe usar clases parametrizadas en lugar de variables globales.

Por ejemplo:

node default {
  class {'apt': 
    always_update =>true 
  }
}
class apt ($always_update = true ) {
  // code 
}

node 'example.com' { 
  class { bar: }
}

Vea la documentación de títeres para más información:


6
2018-03-07 11:14



Sí, eso es lo que intentaba, pero para 2.7 la sintaxis es ligeramente diferente: class { 'apt': always_update => true } - Tombart
Me actualicé a títere 3.1.0, si tengo exactamente tu código, obtengo esto: Could not parse for environment production: Syntax error at '='; expected '}'. Sin parámetros funciona, pero no resuelve nada. - Tombart
post editado para reflejar la sintaxis de títere 3 - Kristaps
Tuve también un error en la declaración de esa clase, ahora finalmente funciona. ¡Gracias! - Tombart


Estas respuestas parecen un poco desactualizadas, con las nuevas versiones de Puppet i.e 3.7.x, los parámetros de clase se pueden pasar usando Hiera. Recurso como declaración de clase ya no se considera la mejor práctica.

Aunque la segunda respuesta utiliza Hiera, pero está utilizando explícitamente la función "hiera", lo que de nuevo es una práctica poco aconsejable.

La nueva solución se vería así:

/etc/puppet/manifests/site.pp:

node default {
    include apt
}

/etc/puppet/modules/apt/manifests/init.pp:

class apt ($always_update = true ) {
  // code 
}

/etc/puppet/hieradata/<filename>.yaml

apt::always_update: true

Los archivos yaml de datos de Hiera pueden tener diferentes valores del parámetro según sea necesario.


4
2018-05-27 07:44



¿Cuál sería el nombre del archivo hiera en este caso de ejemplo? - Felipe Alvarez


La práctica recomendada en estos días es usar Hiera. Está integrado en 3.x, pero en 2.7 necesita instalarlo por separado.

A continuación, puede obtener datos de Hiera en su manifiesto para la apt clase:

$always_apt_update = hiera("always_apt_update")

Con una configuración de Hiera como esta ..

:hierarchy:
  - %{::clientcert}
  - common

..el nodo (tirado de la clientcert hecho) se utilizará como precedencia más alta en la búsqueda que la common.yaml expediente.

Entonces, con always_apt_update: false en node1.example.com.yaml y always_apt_update: true en common.yaml, node1 terminará con esa variable establecida en falso, mientras que otros nodos tendrán su valor predeterminado en verdadero.


3
2018-03-08 06:06



Gracias, parece interesante. Es obvio que Puppet está pasando por un rápido desarrollo y, a veces, no está claro cuál es la forma actual de soporte. - Tombart