厨师跳过食谱
Chef skip recipes
我有两个角色:
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 其中包括 base role
{
"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],recipe[clean-up] ,食谱[nginx]。请注意,它跳过了 Web 角色的最后一个 recipe[clean-up]。为什么?无论如何,我可以强制重新运行 recipe[clean-up]?
不,Chef 是一个配置管理系统,而不是脚本 运行ner。
每个配方都应该 运行 一次并使系统处于特定状态。
这是分多个阶段完成的:
- 同步运行列表(展开后,每个菜谱按它们出现的顺序一次)
- 编译每个配方中的资源,制作一个资源集合(按照它们出现的顺序)
- 收敛:运行 每个资源的代码(提供者代码),并在所需状态与当前状态不同时执行某些操作。
- 运行 更新资源触发的延迟通知。
更多详情here
主要思想是描述系统状态,如果系统处于所需状态,则能够 运行 N 次不更改系统。
您可以从您的基本角色中删除此配方,或者您可以执行一个 "closing" 角色,确保出现在每个节点 运行 列表的末尾。
我有两个角色:
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 其中包括 base role
{
"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],recipe[clean-up] ,食谱[nginx]。请注意,它跳过了 Web 角色的最后一个 recipe[clean-up]。为什么?无论如何,我可以强制重新运行 recipe[clean-up]?
不,Chef 是一个配置管理系统,而不是脚本 运行ner。
每个配方都应该 运行 一次并使系统处于特定状态。
这是分多个阶段完成的:
- 同步运行列表(展开后,每个菜谱按它们出现的顺序一次)
- 编译每个配方中的资源,制作一个资源集合(按照它们出现的顺序)
- 收敛:运行 每个资源的代码(提供者代码),并在所需状态与当前状态不同时执行某些操作。
- 运行 更新资源触发的延迟通知。
更多详情here
主要思想是描述系统状态,如果系统处于所需状态,则能够 运行 N 次不更改系统。
您可以从您的基本角色中删除此配方,或者您可以执行一个 "closing" 角色,确保出现在每个节点 运行 列表的末尾。