2015-04-07 162 views
1

我有2個作用:廚師跳過食譜

base.json

{ 
    "chef_type": "role", 
    "default_attributes": {}, 
    "description": "Base Machine", 
    "env_run_lists": {}, 
    "json_class": "Chef::Role", 
    "name": "base", 
    "override_attributes": {}, 
    "run_list": [ 
    "recipe[apt]", 
    "recipe[clean-up]" 
    ] 
} 

web.json包括作用

{ 
    "chef_type": "role", 
    "default_attributes": {}, 
    "description": "Web Machine", 
    "env_run_lists": {}, 
    "json_class": "Chef::Role", 
    "name": "web", 
    "override_attributes": {}, 
    "run_list": [ 
     "role[base]", 
     "recipe[nginx]", 
     "recipe[clean-up]" 
    ] 
    } 

當我運行,所述run_list將被擴展爲:recipe [apt],配方[清理],配方[nginx]。請注意,它跳過了Web角色的最後配方[清理]。爲什麼?無論如何,我可以強制重新運行配方[清理]

回答

2

不,廚師是一個配置管理系統,不是腳本選手。

每個配方應該運行一次並使系統處於特定狀態。

這在許多階段完成:

  1. 同步的運行列表(擴大之後,順序每個配方,一旦他們出現)
  2. 編譯的資源,每個配方,使得資源集合(在順序它們也出現)
  3. 收斂:爲每個資源(提供程序代碼)運行代碼,並在所需狀態與當前狀態不同時執行一些操作。
  4. 運行由更新的資源觸發的延遲通知。

更多細節here

的主要思想是一個粗糙地系統狀態,並能夠運行N次不改變系統,如果它是在理想狀態。

您可以從您的基本角色中刪除此配方,或者您可以執行「關閉」角色,以確保顯示在每個節點運行列表的末尾。

+0

感謝您的反饋,我如何處理您提到的「關閉」角色? –

+0

當你做了你的基地角色,你必須確保它自己在最後(有刀插件可以爲此提供幫助) – Tensibai

+0

ah .. ic。所以如果我將**配方[清理] **添加到** web **角色,那麼我需要從** base **角色中刪除**配方[清理] **。我對麼? –