Предположим, следующий Марионеточный код:
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 возвращает пустую строку... Каков правильный метод?
У вас нет.
Чтобы получить такое значение, вам нужно будет обратиться к экземпляру вашего определенного типа, например,
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
},
}
}