하나의 정의에서 다른 정의의 변수를 얻는 방법은 무엇입니까?

하나의 정의에서 다른 정의의 변수를 얻는 방법은 무엇입니까?

다음 Puppet 코드를 가정해 보겠습니다.

define apache::base($pkgver = '2.4.10') {
    $apache_ver = $pkgver
    ...
}
define apache::vhost($instance) {
    ...
    $apache_ver = getvar(......)
}

apache::base{ "static-files":}
apache::base{ "dynamic": pkgver => '2.4.8' }
apache::vhost{ "static.example.com": instance => "static-files"}

해당 코드에서 (매개변수) 또는 (변수)를 어떻게 apache::vhost참조 할 수 있나요 ?$pkgver$apache_verapache::base

우리의 stdlib는 너무 오래되었고(Puppet은 여전히 ​​2.7.x입니다) getparam(). getvar()할 수 있어야 하는데 어떻게 해야 할까요? 이 경우 변수의 전체 이름은 무엇입니까?

시도했지만 소용이 없었 getvar("apache::base[$instance]::apache_ver")습니다 getvar("apache::base::$instance::apache_ver"). getvar는 빈 문자열을 반환합니다. 올바른 방법은 무엇입니까?

답변1

당신은 그렇지 않습니다.

그러한 값을 얻으려면 다음을 참조해야 합니다.사례정의된 유형(예:

Apache::Vhost['main-site']::server_alias

그러나 그러한 것은 구현되지 않습니다.

모델을 재구성해야 합니다. 모듈에서 은( apache::vhost는) 독립될 수 없습니다 apache::base. 대신 apache::base가상 호스트 자체를 선언할 수 있도록 리소스 해시를 전달하는 것이 좋습니다 .

define apache::base($pkgver = '2.4.10', $vhosts = {}) {
  $apache_ver = $pkgver
  ...
  create_resources('apache::vhost', $vhosts, { instance => $title })
}

그리고 그것을 다음과 같이 사용하십시오

apache::base{ "static-files":
  vhosts => {
    "static.example.com" => { 
      # attributes for Apache::Vhost["static.example.com"] go here
    },
  }
}

관련 정보