2015-04-07 196 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 **角色中删除**配方[清理] **。我对么? –