
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::vhost
beziehen ?$pkgver
$apache_ver
apache::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::vhost
kann nicht unabhängig von sein apache::base
. Stattdessen sollten Sie einen Ressourcen-Hash übergeben, apache::base
damit 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
},
}
}