- Chef 教程
- Chef - 首页
- Chef - 概述
- Chef - 架构
- Chef - 版本控制系统设置
- Chef - 工作站设置
- Chef - 客户端设置
- Chef - 测试厨房设置
- Chef - Knife 设置
- Chef - Solo 设置
- Chef - Cookbook
- Chef - Cookbook 依赖关系
- Chef - 角色
- Chef - 环境
- Chef - Chef-Client 作为守护进程
- Chef - Chef-Shell
- Chef - 测试 Cookbook
- Chef - Foodcritic
- Chef - ChefSpec
- 使用测试厨房测试 Cookbook
- Chef - 节点
- Chef - Chef-Client 运行
- 高级 Chef
- 动态配置菜谱
- Chef - 模板
- Chef - 使用 Chef DSL 的纯 Ruby
- Chef - 使用菜谱的 Ruby Gems
- Chef - 库
- Chef - 定义
- Chef - 环境变量
- Chef - 数据包
- Chef - 数据包脚本
- Chef - 跨平台 Cookbook
- Chef - 资源
- 轻量级资源提供程序
- Chef - 蓝图
- Chef - 文件和包
- Chef - 社区 Cookbook
- Chef 有用资源
- Chef - 快速指南
- Chef - 有用资源
- Chef - 讨论
Chef - 跨平台 Cookbook
跨平台 Cookbook 是指那些采用其将要运行的底层环境的 Cookbook。Chef 提供了许多功能,有助于编写能够在任何将要部署的操作系统上运行的跨平台 Cookbook。这有助于开发人员编写一个完全可操作的 Cookbook。
为了做到这一点,我们需要一个 Cookbook。在我们的例子中,它将是 test_cookbook 和一个运行列表,其中包含 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 - 将 Cookbook 上传到 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')
上传修改后的 Cookbook 并运行 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 语句,而使用简单的哈希表。
示例 Cookbook
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 runsvdir" 将起作用
- 对于 Gentoo,"/etc/init.d/runit-start" 将起作用
广告