우리는 역할/프로필 패턴을 사용하고 있습니다. 아래 예에서는 값이 제공되지 않으면 ::apache 클래스 기본값이 사용되도록 선택적으로 hiera에서 매개 변수를 전달하고 싶습니다(내부적으로 ::apache::params 클래스에서 가져옴). 이렇게 하면 일부 서버에서 keepalive 값을 설정할 수 있지만 그렇지 않은 경우 ::apache 클래스가 값 자체를 결정할 수 있습니다.
common.yaml
-----------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 5
apache.pp
---------
class profiles::apache {
$apache_keepalive = hiera('profiles::apache::keepalive')
$apache_keepalive_timeout = hiera('profiles::apache::keepalive_timeout')
class {'::apache':
keepalive => $apache_keepalive,
keepalive_timeout => $apache_keepalive_timeout,
}
}
hiera 조회의 기본값을 'undef'로 설정하려고 시도했지만 결국 구성에 빈 값이 표시됩니다.
답변1
당신은 다음을 통해 이 효과를 얻습니다.자동 매개변수 조회.
귀하의 Hiera 데이터는 다음을 목표로 합니다.실제아파치 프로필이 아닌 아파치 모듈.
apache::keepalive: true
class apache
매개변수가 있는 경우에만 작동합니다 $keepalive
.
그리고 그렇습니다. 이에 대한 기본값은 에서 가져와야 합니다 apache::params
.
class apache($keepalive = $::apache::params::keepalive)
inherits ::apache::params {
...
}
답변2
저는 개인적으로 모든 변수를 명시적으로 선언하는 것을 선호합니다. 이 경우 기본값을 선언 common.yaml
한 다음 다른 yaml 파일을 사용하여 기본값과 다른 값을 선언합니다.
common.yaml
-----------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 5
servertype.yaml
---------------
profiles::apache::keepalive : On
profiles::apache::keepalive_timeout : 30
그런 다음 계층 구조를 설정하십시오.hiera.yaml
:hierarchy: - servertype.yaml
- common.yaml
이 작업을 원하지 않는다면 유일한 다른 접근 방식은 if 문을 사용하는 것입니다.
apache.pp
---------
class profiles::apache {
$apache_keepalive = hiera('profiles::apache::keepalive')
$apache_keepalive_timeout = hiera('profiles::apache::keepalive_timeout')
if ($apache_keepalive == undef) {
class {'::apache': }
}
else {
class {'::apache':
keepalive => $apache_keepalive,
keepalive_timeout => $apache_keepalive_timeout,
}
}
}