Classes parametrizadas são uma construção de linguagem para ajudar você a estruturar melhor seu código. Isso evita que você use excessivamente variáveis globais (como no seu exemplo).
Imagine que você incluiu mais 20 classes na descrição do seu nó e todas precisariam de algumas variáveis sendo definidas no escopo global ou de nó do manifesto. Também classes parametrizadas permitem que você tenha parâmetros padrão facilmente, então você pode usar um valor padrão para o $file_owner
em vez de ter que fornecer o mesmo valor (por exemplo, larry
) em vários locais diferentes.
Seu trecho de exemplo (com dois nós adicionais) pode ser escrito da seguinte forma:
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,
}
}
Com o uso de variáveis globais, você precisaria declarar uma variável chamada $owner
em cada nó e não seria possível substituir o parâmetro $file_name
variable / por nó. Em vez disso, você precisaria declarar outra classe bar
para cada nó.
O documento sobre a evolução da linguagem Puppet e, claro, o guia de idiomas fornecem alguns bons exemplos sobre como usar classes parametrizadas e a lógica por trás dessa construção de linguagem: