2012-03-13 10 views
5

私はシェフの環境を使用しており、環境ごとの実行リストを使用したいと考えています。問題は、私が今やっているように自分自身を繰り返したくないということです。例:シェフ:共通の環境ごとの実行リスト項目を共有できますか?

{ 
    "name": "myapp", 
    "default_attributes": { 
    }, 
    "json_class": "Chef::Role", 
    "env_run_lists": { 
    "production": [ 
     # Has less packages because services are spread across specialized nodes 
     "role[base]", 
     "recipe[mysql::client]", 
     "recipe[myapp]" 
    ], 
    "staging": [ 
     # Has less packages because services are spread across specialized nodes 
     "role[base]", 
     "recipe[mysql::client]", 
     "recipe[myapp]" 
    ], 
    "development": [ 
     "role[base]", 
     "recipe[mysql::client]", 
     "recipe[myapp]", 
     "role[utility]", 
     "role[cache]" 
    ] 
    }, 
    "run_list": [ 

    ], 
    "description": "The myapp.com core application role", 
    "chef_type": "role", 
    "override_attributes": { 

    } 
} 

これを繰り返すのを避ける方法はありますか?

 "role[base]", 
     "recipe[mysql::client]", 
     "recipe[myapp]", 

私はちょうど同期を外して展開を破る環境の実行リストを避けたいと思います。

答えて

5

この時点では、ロールは純粋に宣言的であり、そのように動的ではありません。これらの3つの項目を含む役割を作成し、それを環境ごとの実行リストに含めることができます。

+1

私の質問に答えるより良い男を頼むことができませんでした - ありがとう! – Kenny

0

これはJSONでは不可能かもしれませんが、Ruby DSLを使用して役割を定義することは可能です。

これは、自分の役割ファイルは次のようになります方法です:

name "myapp" 
description "Description of the role" 
base_run_list = [ "role[base]", "recipe[mysql::client]", "recipe[myapp]" ] 
env_run_lists "production" => base_run_list, "staging" => base_run_list , "development" => base_run_list + ["role[utility]", "role[cache]"] 

base_run_list共通のレシピのリストです。

関連する問題