- 厨师教程
- 厨师 - 主页
- 厨师 - 概述
- 厨师 - 建筑
- Chef - 版本控制系统设置
- 厨师 - 工作站设置
- Chef - 客户端设置
- 厨师 - 测试厨房设置
- 厨师 - 刀具设置
- 厨师 - 独奏设置
- 厨师 - 食谱
- Chef - 食谱依赖项
- 厨师 - 角色
- 厨师 - 环境
- Chef - Chef-Client 作为守护进程
- 厨师 - Chef-Shell
- 厨师 - 测试食谱
- 厨师 - 美食评论家
- 厨师 - ChefSpec
- 使用测试厨房测试食谱
- 厨师 - 节点
- 厨师 - 厨师-客户运行
- 高级厨师
- 动态配置菜谱
- 厨师 - 模板
- Chef - 带有 Chef DSL 的纯 Ruby
- 厨师 - 红宝石宝石与食谱
- 厨师 - 图书馆
- 厨师 - 定义
- Chef - 环境变量
- 厨师 - 数据袋
- Chef - 数据包脚本
- Chef - 跨平台食谱
- 厨师 - 资源
- 轻量级资源提供者
- 厨师 - 蓝图
- Chef - 文件和包
- 厨师 - 社区食谱
- 厨师有用的资源
- 厨师 - 快速指南
- 厨师 - 有用的资源
- 厨师 - 讨论
Chef - 跨平台食谱
跨平台说明书是那些采用将要运行的底层环境的说明书。Chef 提供了许多功能,有助于编写能够在要部署的任何操作系统上运行的跨平台说明书。这有助于开发人员编写一本完全可操作的食谱。
为了做到这一点,我们需要一本食谱。在我们的例子中,它将是 test_cookbook 和一个运行列表,其中将包含 Cookbook 定义。
工作方式
检索节点平台详细信息并执行我们的说明书中的条件逻辑取决于平台。在我们的例子中,我们将在 Ubuntu 上对其进行测试。
步骤 1 - 如果节点是 Ubuntu,则记录一条消息。
vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb Log.info("Running on ubuntu") if node.platform['ubuntu']
步骤 2 - 将食谱上传到 Chef 服务器。
vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb Uploading my_cookbook [0.1.0] Uploaded 1 cookbook.
步骤 3 - 在节点上运行 Chef 客户端。
user@server:~$ sudo chef-client ...TRUNCATED OUTPUT... [2013-03-03T20:07:39+00:00] INFO: Running on Ubuntu ...TRUNCATED OUTPUT...
或者,如果对特定平台不感兴趣而只需要知道正在使用哪个声明性平台,则可以使用以下语句。
Log.info("Running on a debian derivative") if platform_family?('debian')
上传修改后的食谱并在 Ubuntu 节点上运行 Chef 客户端将显示以下结果。
[2013-03-03T20:16:14+00:00] INFO: Running on a debian derivative
脚本的工作流程
在上面的命令中,Ohai 将发现节点操作系统的当前状态,并将其存储为节点对象的平台属性。
node['platform']
或者,您可以使用方法样式语法 -
node.platform
设置平台特定值
为了设置特定于平台的值,chef 提供了方便的方法 value_for_platform 和 value_for_platform_family。它们可用于避免复杂的 case 语句并使用简单的散列代替。
示例食谱
execute "start-runsvdir" do command value_for_platform( "debian" => { "default" => "runsvdir-start" }, "ubuntu" => { "default" => "start runsvdir" }, "gentoo" => { "default" => "/etc/init.d/runit-start start" } ) action :nothing end
在上面的示例中,该命令是特定于操作系统定义的。
- 对于 Debian,“runsvdir-start”将起作用
- 对于 Ubuntu,“start runningvdir”将起作用
- 对于 Gentoo,“/etc/init.d/runit-start”将起作用