
Supongamos que el siguiente 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"}
¿Cómo puede el código apache::vhost
hacer referencia a $pkgver
(parámetro) o $apache_ver
(variable) en el correspondiente apache::base
?
Nuestra stdlib es demasiado antigua (y nuestro Puppet todavía es 2.7.x) y no tiene getparam()
. getvar()
Debería poder hacerlo, pero ¿cómo? ¿Cuál es el nombre completo de la variable en este caso?
Lo intenté getvar("apache::base[$instance]::apache_ver")
y getvar("apache::base::$instance::apache_ver")
fue en vano: getvar devuelve una cadena vacía... ¿Cuál es el método correcto?
Respuesta1
No lo haces.
Para llegar a tal valor, habría que consultar uninstanciade su tipo definido, por ejemplo
Apache::Vhost['main-site']::server_alias
Sin embargo, tal cosa no se implementa.
Necesitas reestructurar tu modelo. En su módulo, apache::vhost
no puede ser independiente de apache::base
. En su lugar, querrás entregarle un hash de recurso apache::base
para que pueda declarar los vhosts por sí mismo.
define apache::base($pkgver = '2.4.10', $vhosts = {}) {
$apache_ver = $pkgver
...
create_resources('apache::vhost', $vhosts, { instance => $title })
}
Y usarlo como
apache::base{ "static-files":
vhosts => {
"static.example.com" => {
# attributes for Apache::Vhost["static.example.com"] go here
},
}
}