ある定義内の変数を別の定義から取得するにはどうすればよいでしょうか?

ある定義内の変数を別の定義から取得するにはどうすればよいでしょうか?

次のような 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_verapache::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
    },
  }
}

関連情報