Các lớp tham số hóa là một cấu trúc ngôn ngữ để giúp bạn cấu trúc mã của mình tốt hơn. Nó ngăn bạn sử dụng quá mức các biến toàn cục (như trong ví dụ của bạn).
Hãy tưởng tượng bạn đã bao gồm thêm 20 lớp trong mô tả nút của mình và tất cả sẽ cần một số biến được đặt trong phạm vi toàn cầu hoặc nút của tệp kê khai. Các lớp được tham số hóa cũng cho phép bạn có các tham số mặc định một cách dễ dàng, vì vậy bạn có thể sử dụng một giá trị mặc định cho $file_owner
thay vì phải cung cấp cùng một giá trị (ví dụ larry
) ở một số nơi khác nhau.
Đoạn ví dụ của bạn (có hai nút bổ sung) có thể được viết như sau:
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,
}
}
Với việc sử dụng các biến toàn cục của bạn, bạn cần khai báo một biến có tên $owner
trong mỗi nút và bạn sẽ không thể ghi đè $file_name
biến / tham số trên mỗi nút. Thay vào đó, bạn cần khai báo một bar
lớp khác cho mỗi nút.
Tài liệu về tiến hóa ngôn ngữ của Puppet và tất nhiên hướng dẫn ngôn ngữ cung cấp một số ví dụ hay về cách sử dụng các lớp được tham số hóa và lý do đằng sau cấu trúc ngôn ngữ này:
$bar::file_name
và$::file_owner
truy cập các biến tương ứng đó. Tuy nhiên, khi sử dụng các lớp tham số hóa, các biến được truyền vào một lớp thông qua các tham số trở thành các biến có phạm vi cục bộ.