
Suponha o seguinte código 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"}
Como o código pode apache::vhost
se referir a $pkgver
(parâmetro) ou $apache_ver
(variável) no correspondente apache::base
?
Nosso stdlib é muito antigo (e nosso Puppet ainda é 2.7.x) e não possui getparam()
. getvar()
deveria ser capaz de fazer isso - mas como? Qual é o nome completo da variável neste caso?
Tentei getvar("apache::base[$instance]::apache_ver")
e getvar("apache::base::$instance::apache_ver")
sem sucesso - getvar retorna uma string vazia... Qual é o método correto?
Responder1
Você não.
Para chegar a esse valor, você teria que consultar uminstânciado seu tipo definido, por exemplo
Apache::Vhost['main-site']::server_alias
No entanto, tal coisa não está implementada.
Você precisa reestruturar seu modelo. No seu módulo, apache::vhost
não pode ser independente de apache::base
. Em vez disso, você desejará entregar um hash de recurso apache::base
para que ele possa declarar os próprios vhosts.
define apache::base($pkgver = '2.4.10', $vhosts = {}) {
$apache_ver = $pkgver
...
create_resources('apache::vhost', $vhosts, { instance => $title })
}
E use-o como
apache::base{ "static-files":
vhosts => {
"static.example.com" => {
# attributes for Apache::Vhost["static.example.com"] go here
},
}
}