
Предположим, следующий код 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
},
}
}