Chef教程
Chef高级

Chef Cookbook跨平台

跨平台说明书是那些采用将要运行的底层环境的说明书。 Chef 提供了许多功能,有助于编写能够在任何操作系统上运行的跨平台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 runningvdir"将起作用 对于 Gentoo,"/etc/init.d/runit-start" 会起作用
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4