Las clases parametrizadas son una construcción de lenguaje para ayudarlo a estructurar mejor su código. Le impide usar excesivamente variables globales (como en su ejemplo).
Imagine que incluye 20 clases más en la descripción de su nodo y todas necesitarían que se establezcan algunas variables en el ámbito global o de nodo del manifiesto. Además, las clases parametrizadas le permiten tener parámetros predeterminados fácilmente, por lo que podría usar un valor predeterminado para en $file_owner
lugar de tener que proporcionar el mismo valor (por ejemplo larry
) en varios lugares diferentes.
Su fragmento de ejemplo (con dos nodos adicionales) podría escribirse de la siguiente manera:
node 'example.com' {
class { bar: }
}
node 'example.net' {
class { bar: owner = "harry" }
}
node 'example.net' {
class { bar: file_name = "barry.txt" }
}
class bar($owner = "larry", $file_name = "larry.txt") {
class { do_stuff: owner => $owner, file_name => $file_name }
}
class do_stuff($owner, $file_name) {
file { $file_name:
ensure => file,
owner => $owner,
}
}
Con su uso de variables globales, necesitaría declarar una variable nombrada $owner
en cada nodo y no podría sobrescribir la $file_name
variable / parámetro por nodo. En su lugar, deberá declarar otra bar
clase para cada nodo.
El documento sobre la evolución del lenguaje de Puppet y, por supuesto, la guía del idioma proporcionan algunos buenos ejemplos sobre cómo usar las clases parametrizadas y los fundamentos de esta construcción del lenguaje:
$bar::file_name
y$::file_owner
acceder a esas variables respectivas. Sin embargo, cuando se utilizan clases parametrizadas, las variables pasadas a una clase a través de los parámetros se convierten en variables de ámbito local.