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

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

Предположим, следующий код 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_ver(переменную) в соответствующем apache::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чтобы он мог объявить 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
    },
  }
}

Связанный контент