Como obter variáveis ​​em uma definição de outra?

Como obter variáveis ​​em uma definição de outra?

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::vhostse 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::vhostnão pode ser independente de apache::base. Em vez disso, você desejará entregar um hash de recurso apache::basepara 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
    },
  }
}

informação relacionada