매개 변수화 된 클래스는 코드를보다 잘 구성하는 데 도움이되는 언어 구성입니다. 전역 변수를 과도하게 사용하지 못하게합니다 (예와 같이).
노드 설명에 20 개의 클래스가 더 포함되어 있고 매니페스트의 전역 또는 노드 범위에서 일부 변수를 설정해야한다고 상상해보십시오. 또한 매개 변수화 된 클래스를 사용하면 기본 매개 변수를 쉽게 가질 수 있으므로 여러 위치에서 $file_owner
동일한 값 (예 :)을 제공하는 대신 기본값을 사용할 수 있습니다 larry
.
예제 스 니펫 (두 개의 추가 노드 포함)은 다음과 같이 작성할 수 있습니다.
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,
}
}
전역 변수를 사용하면 $owner
각 노드에 이름이 지정된 변수를 선언해야하며 노드 $file_name
당 변수 / 매개 변수 를 덮어 쓸 수 없습니다 . 대신 bar
각 노드마다 다른 클래스 를 선언해야 합니다.
Puppet의 언어 진화에 대한 문서와 물론 언어 안내서는 매개 변수가있는 클래스를 사용하는 방법과이 언어 구문의 근거에 대한 좋은 예를 제공합니다.
$bar::file_name
하고$::file_owner
해당 변수에 액세스해야합니다. 그러나 매개 변수화 된 클래스를 사용할 때 매개 변수를 통해 클래스로 전달 된 변수는 로컬 범위 변수가됩니다.