厨师跳过食谱

时间:2015-04-07 09:08:30

标签: chef chef-recipe chef-solo

我有两个角色:

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角色的最后一个配方[清理] 。为什么?无论如何,我是否可以强制重新运行食谱[清理]

1 个答案:

答案 0 :(得分:2)

不,Chef是配置管理系统,而不是脚本运行器。

每个配方应该运行一次,让系统处于特定状态。

这是在很多阶段完成的:

  1. 同步运行列表(扩展后,每个食谱按照它们出现的顺序进行一次)
  2. 编译每个配方中的资源,进行资源收集(按顺序显示)
  3. Converge:运行每个资源的代码(提供者代码),并在所需状态与当前状态不同时执行某些操作。
  4. 运行由更新资源触发的延迟通知。
  5. 更多详情here

    主要思想是描述系统状态,并且如果系统处于所需状态,则能够运行N次而不更改系统。

    您可以从基本角色中删除此配方,也可以执行"关闭"您确保在每个节点运行列表的末尾显示的角色。