Как получить переменные в, каждый определяет от другого?

Предположим, следующий Марионеточный код:

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_ver (переменная) в соответствии apache::base?

Наш stdlib слишком стар (и наша Марионетка все еще 2.7.x), и не имеет getparam(). getvar() должен смочь сделать это - но как? Каково полное имя переменной в этом случае?

Я попробовал getvar("apache::base[$instance]::apache_ver") и getvar("apache::base::$instance::apache_ver") напрасно - getvar возвращает пустую строку... Каков правильный метод?

0
задан 12 June 2015 в 00:17
1 ответ

У вас нет.

Чтобы получить такое значение, вам нужно будет обратиться к экземпляру вашего определенного типа, например,

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

Такой Однако эта вещь не реализована.

Вам необходимо реструктурировать вашу модель. В вашем модуле apache :: vhost не может быть независимым от apache :: base . Вместо этого вы захотите передать хэш ресурса apache :: base , чтобы он мог объявить сам vhosts.

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
    },
  }
}
0
ответ дан 5 December 2019 в 12:40

Теги

Похожие вопросы