📜  Chef-跨平台食谱

📅  最后修改于: 2020-11-02 03:26:59             🧑  作者: Mango


跨平台食谱是指那些将在其上运行的基础环境的食谱。 Chef提供了许多功能,有助于编写能够在将要部署到其上的任何OS上运行的跨平台食谱。这有助于开发人员编写完全可操作的食谱。

为此,我们需要准备一本菜谱。在我们的例子中,它将是test_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 

在上面的示例中,该命令是所定义的特定于OS的。

  • 对于Debian,“ runsvdir-start”将起作用
  • 对于Ubuntu,“启动runsvdir”将起作用
  • 对于Gentoo,“ / etc / init.d / runit-start”将起作用