2017-06-02 12 views
0

あるクラスのスコープでは、別のクラスの変数にアクセスできる必要があります。変数はパラメータとして渡されます。使用例では人形では、異なるパラメータ化されたクラスからクラススコープ内の変数を取り出す方法

class parameterized_class (
    $param1, 
) { 
    ... 
} 

class other_class() { 
    include parameterized_class 
    Class['parameterized_class'] -> Class['other_class'] 
    $local_var = $parameterized_class::param1 
} 

node default { 
    class { 'parameterized_class': 
     param1 => 'somevalue', 
    } 
    class { 'other_class': } 
} 

上記の例では動作しません、私はおおよそ次のようになりエラーが出るよう:

param1に渡す必要があります クラス[Parameteriz ed_class]ノードlocalhostを明らかに

上 /path/to/modules/parameterized_class/manifests/init.pp:1 で、任意のパラメータを渡さずparameterized_classを宣言しようとしています。しかし、ドキュメントから、私はincludeがすでにクラスが既に宣言されていることを許していることがわかります。parameterized_class宣言をother_classの依存関係として持っているので、このエラーがどのようになっているのか分かりません。

私は人形3.4.3、トラスティのUbuntu 14.04で利用可能なバージョンを使用してい

がどのように私はother_classの範囲内からparameterized_class$param1の値を取得については行くべき

?パラメータ化されたクラスで includeを使用することはできませんか?

+0

まず、旧式のPuppetバージョン(https://docs.puppet.com/puppet/4.10/puppet_collections.html#apt-based-systems)にアップグレードします。第2に、パラメータ化されたクラスで 'include'を使うことはできますが、ここで必要なものを達成するのには役立ちません。第三に、 'class ['parameterized_class'] - >クラス['other_class']'を他のクラスの定義の中に入れようとしていると、おそらく最終的に問題を引き起こすでしょう。これと何をしようとしているのか、問題を解決する最も簡単な方法はhieraか 'include parameterized_class'行を削除することです。 –

+0

ご希望のルートをお知らせください。さらにお手伝いできます。 –

答えて

0

パペットのドキュメント(https://docs.puppet.com/puppet/3.5/lang_classes.html#include-like-behavior)によれば、必須パラメータ付きのインクルード宣言は使用できません。あなたのケースでは、あなたができることは、ノード定義でそれを宣言して既に処理しているので、インクルードを気にしないだけです。また、両方ともあなたのノード定義で宣言されているので、そこにも同様に並べ替えたいと思うでしょう。

デフォルト値を提供しないという副作用は、モジュール間で変数を使用する場合と同じように悪い習慣です。

関連する問題