Wie erhält man Variablen in einer Definition aus einer anderen?

Wie erhält man Variablen in einer Definition aus einer anderen?

Angenommen, der folgende Puppet-Code:

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"}

Wie kann sich der Code im entsprechenden auf (Parameter) oder (Variable) apache::vhostbeziehen ?$pkgver$apache_verapache::base

Unsere Standardbibliothek ist zu alt (und unsere Puppet ist immer noch 2.7.x) und hat kein getparam(). getvar()sollte dazu in der Lage sein – aber wie? Wie lautet in diesem Fall der vollständige Name der Variable?

Ich habe es versucht getvar("apache::base[$instance]::apache_ver"), aber getvar("apache::base::$instance::apache_ver")es hat nichts genützt – getvar gibt eine leere Zeichenfolge zurück ... Was ist die richtige Methode?

Antwort1

Das tust du nicht.

Um einen solchen Wert zu erhalten, müsste man sich auf eineBeispielvon Ihrem definierten Typ, zB

Apache::Vhost['main-site']::server_alias

So etwas ist allerdings nicht implementiert.

Sie müssen Ihr Modell neu strukturieren. In Ihrem Modul apache::vhostkann nicht unabhängig von sein apache::base. Stattdessen sollten Sie einen Ressourcen-Hash übergeben, apache::basedamit es die virtuellen Hosts selbst deklarieren kann.

define apache::base($pkgver = '2.4.10', $vhosts = {}) {
  $apache_ver = $pkgver
  ...
  create_resources('apache::vhost', $vhosts, { instance => $title })
}

Und benutze es wie

apache::base{ "static-files":
  vhosts => {
    "static.example.com" => { 
      # attributes for Apache::Vhost["static.example.com"] go here
    },
  }
}

verwandte Informationen