2017-02-26 8 views
1

プロダクション環境で発生する可能性のある結果が必ずしも反映されないため、ステージング環境で完全にテストすることができないCookbookがあります。私は何をしようとしているソリューションは、そうのような環境のバージョンを凍結することであるとして:1台のプロダクションサーバーで料理ブックの更新をテストする

{ 
    "name": "production", 
    "description": "Production Environment", 
    "cookbook_versions": { 
    "deployment": "= 0.1.12" 
    }, 
... 

などのようにその実行リストで明示的に新しいバージョンを指定することによって、その制限のために特定のサーバーを除外する:

環境のバージョンが resolving cookbooks for run list: ...

ことが理由であるに立ち往生run_list、シェフ・クライアントで指定されたものと同じでない場合

... 
    "run_list": [ 
    "recipe[base]", 
    "recipe[security]", 
    "recipe[deployment::[email protected]]" 
] 
... 

問題は、ありますか?これを回避する方法はありますか? 1つのサーバーでのみレシピの更新をテストするより良い方法はありますか?

答えて

2

既存の制約を上書きすることはできません。そのため、テスト目的で、そのノードを新しい環境に一時的に移動する必要があります。

+0

残念ながら、いくつかのレシピはノードの環境によって異なる動作をするので、目的が達成されません。つまり、テストでは生産時に何が起こるかが反映されません。また、私はこれが本当であるとは思わない、これは基本的には設計上十分であるようだ。私はまた、制約がないときでも、特定のバージョンをランリストで使用するときにシェフが同じ場所でハングすることを発見しました。ちょうどバグだと思われます。 –

+0

この機能はほとんどテストされていませんので、(簡単な)バグがないと自信を持って言えるでしょう。たとえあったとしても、そのエラーは正しく、設計どおりに動作しているため、環境内の矛盾する制約では機能しません。 – coderanger

+0

もう1つの選択肢は、本番環境でデーモンモードまたはバックグラウンドの収束を無効にし、環境を更新してから、少数のマシンでcanaryのデプロイメントを実行することです。 – coderanger

関連する問題