2012-03-13 8 views
5

Tôi đang sử dụng môi trường trong đầu bếp và tôi muốn sử dụng danh sách chạy theo môi trường. Vấn đề là tôi không muốn lặp lại bản thân mình (như tôi đang làm bây giờ). Ví dụ:Đầu bếp: Tôi có thể chia sẻ các mục danh sách chạy chung cho mỗi môi trường không?

{ 
    "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": { 

    } 
} 

Có cách nào để tránh lặp lại điều này không?

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

Tôi chỉ muốn tránh các danh sách chạy môi trường không đồng bộ và triển khai vi phạm.

Trả lời

5

Tại thời điểm này, không. Vai trò là hoàn toàn khai báo và không năng động theo cách đó. Bạn có thể tạo một vai trò bao gồm ba mục đó và bao gồm trong mỗi danh sách chạy môi trường.

+1

Không thể yêu cầu một người tốt hơn trả lời câu hỏi của tôi - cảm ơn! – Kenny

0

Điều này có thể không thực hiện được trong JSON, tuy nhiên bạn có thể sử dụng Ruby DSL để xác định vai trò của mình.

Đây là cách tập vai trò của bạn sẽ trông như thế:

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 là danh sách các công thức nấu ăn chung.