Kelas parameter adalah konstruksi bahasa untuk membantu Anda menyusun kode Anda lebih baik. Ini mencegah Anda menggunakan variabel global secara berlebihan (seperti pada contoh Anda).
Bayangkan Anda menyertakan 20 kelas lagi dalam deskripsi simpul Anda dan semua akan memerlukan beberapa variabel yang diatur dalam lingkup global atau simpul manifes. Juga kelas parameterisasi memungkinkan Anda untuk memiliki parameter default dengan mudah, sehingga Anda dapat menggunakan nilai default untuk $file_ownerdaripada harus memberikan nilai yang sama (misalnya larry) di beberapa tempat berbeda.
Cuplikan contoh Anda (dengan dua node tambahan) dapat ditulis sebagai berikut:
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,
}
}
Dengan penggunaan variabel global, Anda harus mendeklarasikan variabel bernama $ownerdi setiap node dan Anda tidak akan bisa menimpa $file_namevariabel / parameter per node. Sebagai gantinya Anda harus mendeklarasikan barkelas lain untuk setiap node.
Dokumen tentang evolusi bahasa Wayang dan tentu saja panduan bahasa memberikan beberapa contoh yang baik tentang bagaimana menggunakan kelas parameter dan alasan di balik konstruksi bahasa ini:
$bar::file_namedan$::file_ownermengakses variabel-variabel tersebut. Namun, ketika menggunakan kelas parametrized, variabel yang dikirimkan ke kelas melalui parameter menjadi variabel cakupan lokal.