¿Cómo obtener variables en una definición de otra?

¿Cómo obtener variables en una definición de otra?

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::vhosthacer 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::vhostno puede ser independiente de apache::base. En su lugar, querrás entregarle un hash de recurso apache::basepara 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
    },
  }
}

información relacionada