
이 질문을 어떻게 표현해야 할지 잘 모르겠습니다. 부적절하다고 생각되면 수정을 제안해 주세요.
다른 OS를 지원하여 기존 Puppet 모듈을 확장하려고 합니다. 나는 우아한 방법으로 어떻게 해결할 수 있을지 확신할 수 없는 작은 문제에 부딪혔습니다. 파일 에는 params.pp
설치할 OS별 패키지에 대한 정의가 있습니다.
case $::osfamily {
'RedHat': {
$package_server = 'mariadb-server'
$package_client = 'mariadb'
$php_package_name = 'php-mysql'
}
...
모듈은 전체 구성이 설치 여부에 따라 달라지는 방식으로 작성되었습니다 $php_package_name
. PHP용 별도의 mysql 패키지가 없는 다른 OS에 대해 이 모듈을 확장하고 싶기 때문에 $php_package_name
변수를 undef
. 이로 인해 인형이 설치를 시도하는 문제가 발생합니다 Package[undef]
.
이를 예방하는 좋은 방법은 무엇입니까? 지금까지 내 생각은 그것을 거짓으로 설정하고 $php_package_name
불에 대한 전체 정의만을 가지고 있습니다 if $php_package_name != false
. 어쩌면 더 좋은 방법이 있을까요?
답변1
네, 그게 합리적인 접근인 것 같습니다. 이에 대한 약간의 변형을 제안하고 싶습니다. package
사용하는 리소스를 $php_package_name
적용해야 하는지 여부를 결정하는 새 매개변수를 추가하세요.
case $::osfamily {
'RedHat': {
$package_server = 'mariadb-server'
$package_client = 'mariadb'
$php_package_name = 'php-mysql'
$php_package_install = true
}
'otherOS': {
$package_server = 'mariadb-server'
$package_client = 'mariadb'
$php_package_install = false
}
...
그러면 리소스는 다음과 같습니다.
if $thismodule::params::php_package_install {
package { $thismodule::params::php_package_name:
ensure => present,
...
}
}
params.pp에서 모든 OS 관련 작업을 수행하는 방법은 새 OS에 설치하는 데 필요한 리소스가 크게 다를 경우 더 깔끔해지지 않을 수 있다는 점을 명심하세요. 그러면 매니페스트 파일이 읽을 수 없는 조건과 매개변수로 뒤덮인 쥐집으로 바뀔 수도 있습니다. 이 경우 서로 다른 OS를 별도의 클래스로 분리하는 것을 두려워하지 마십시오(예: install_el.pp
RedHat 제품군 및 새 제품군의 경우 또는 install_otheros.pp
에서 올바른 OS가 포함됨 ).init.pp
params.pp