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_owner
vez 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 $owner
em cada nó e não poderá substituir a $file_name
variável / parâmetro por nó. Em vez disso, você precisa declarar outra bar
classe 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_name
e$::file_owner
acessar 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.