Classes parametrizadas são uma construção de linguagem para ajudá-lo a estruturar melhor seu código. Isso impede que você use excessivamente variáveis globais (como no seu exemplo).
Imagine que você incluiu mais 20 classes na descrição do nó e todas precisariam que algumas variáveis fossem definidas no escopo global ou do nó do manifesto. As classes parametrizadas também permitem que você tenha parâmetros padrão com facilidade, portanto, você pode usar um valor padrão para, em $file_ownervez de precisar fornecer o mesmo valor (por exemplo larry) em vários locais diferentes.
Seu snippet de exemplo (com dois nós adicionais) pode ser escrito da seguinte maneira:
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ê precisará declarar uma variável nomeada $ownerem cada nó e não poderá substituir a $file_namevariável / parâmetro por nó. Em vez disso, você precisa declarar outra barclasse para cada nó.
O documento sobre a evolução da linguagem do Puppet e, é claro, o guia da linguagem fornece alguns bons exemplos de como usar classes parametrizadas e a lógica por trás dessa construção da linguagem:
$bar::file_namee$::file_owneracessar essas variáveis respectivas. No entanto, ao usar classes parametrizadas, as variáveis passadas para uma classe por meio dos parâmetros tornam-se variáveis com escopo local.