📅  最后修改于: 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的。