선택적으로 hiera를 사용하여 꼭두각시에 매개변수를 전달합니다.

선택적으로 hiera를 사용하여 꼭두각시에 매개변수를 전달합니다.

우리는 역할/프로필 패턴을 사용하고 있습니다. 아래 예에서는 값이 제공되지 않으면 ::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,
    }
  }

}

관련 정보