2016-08-30 4 views
0

ロジックに基づいてハッシュにエントリを再帰的に挿入する必要があります。ハッシュの状態は、定義された型ループ内で更新されますが、外側のスコープ内では更新されません。以下は、明確にする必要がありますパペット2.7:親スコープでのハッシュの更新に失敗しました

class Test { 
    $config = {} 
    define my_loop() 
    { 
    $config['a'] = 'b' 
    notify { "1) config = $config": } # shows that $config has a=>b 
    } 

    my_loop { 'loop' : } 
    notify { "2) config = $config": 
    require => My_loop['loop'] # shows that $config is empty 
    } 
} 

ので、問題はloop()内部$configa=>bが含まれていますが、loop()外にそれはないということです。私はここで何らかのスコープルールにぶつかっているに違いない。

思考?

答えて

0

Puppet変数の値は一度設定され、その後変更されません。異なる動作をする少数の場所では、実際には修正されたローカルコピーまたは完全に独立した変数が作成されます。

さらに、クラス内にクラスまたは定義済みの型をネストしないでください。 Puppetは歴史的な理由からそれを許していますが、期待しているセマンティクスがないため、ネストされたクラス/タイプを見つけるのが難しくなります。

計算を実行して必要なハッシュを返すカスタム関数を作成することを検討してください。

サポートされているバージョンのPuppetにアップグレードすることも可能かどうかを検討してください。バージョン2.7は非常に古いです。

+0

ありがとうございました。私は必要なハッシュを返すカスタムRuby関数を書くことになった。 – alecswan

関連する問題