
次のような 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"}
のコードは、対応する の(パラメータ) または(変数) をどのようapache::vhost
に参照できますか?$pkgver
$apache_ver
apache::base
私たちの stdlib は古すぎる (そして Puppet はまだ 2.7.x) ので、 がありませんgetparam()
。getvar()
それができるはずですが、どうすればいいでしょうか? この場合の変数の完全な名前は何ですか?
試してみましたgetvar("apache::base[$instance]::apache_ver")
が、getvar("apache::base::$instance::apache_ver")
無駄でした。getvar は空の文字列を返します... 正しい方法は何ですか?
答え1
あなたはしない。
このような値を取得するには、実例定義したタイプの、例:
Apache::Vhost['main-site']::server_alias
しかし、そのようなことは実装されていません。
モデルを再構築する必要があります。モジュールでは、apache::vhost
は から独立できませんapache::base
。代わりに、 にリソース ハッシュを渡して、apache::base
が vhosts 自体を宣言できるようにする必要があります。
define apache::base($pkgver = '2.4.10', $vhosts = {}) {
$apache_ver = $pkgver
...
create_resources('apache::vhost', $vhosts, { instance => $title })
}
そして、それを次のように使う
apache::base{ "static-files":
vhosts => {
"static.example.com" => {
# attributes for Apache::Vhost["static.example.com"] go here
},
}
}