Chef - 定义

定义可以定义为对资源进行分组的逻辑方法,这些资源会反复使用。在此流程中,我们对资源进行分组并为其命名,以重新获得已定义Cookbook(食谱)的可读性。

为了做到这一点,我们应该有一个Cookbook(食谱)。在本例中,我们使用 test_cookbook 和包含Cookbook(食谱)的节点运行列表。

创建定义

步骤 1 − 在Cookbook(食谱)定义文件夹中创建一个新的定义文件。

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/definitions/ 
capistrano_deploy_dirs.rb 
define :capistrano_deploy_dirs, :deploy_to => '' do 
   directory "#{params[:deploy_to]}/releases" 
   directory "#{params[:deploy_to]}/shared" 
   directory "#{params[:deploy_to]}/shared/system" 
end

步骤 2 − 使用 cookbooks 默认Kitchen(配方)中的定义。

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
capistrano_deploy_dirs do
    deploy_to "/srv"
end

步骤 3 − 将 cookbook 上传到 chef 服务器。

vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook
上传 test_cookbook [0.1.0]

步骤 4 − 在所需节点上运行 Chef 客户端。

vipin@laptop:~/chef-repuser@server $ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-18T16:31:11+00:00] INFO: Processing directory[/srv/ 
releases] action create (my_cookbook::default line 2) 
[2013-01-18T16:31:11+00:00] INFO: directory[/srv/releases] created 
directory /srv/releases 
[2013-01-18T16:31:11+00:00] INFO: Processing directory[/srv/ 
shared] action create (my_cookbook::default line 3) 
[2013-01-18T16:31:11+00:00] INFO: directory[/srv/shared] created 
directory /srv/shared 
[2013-01-18T16:31:11+00:00] INFO: Processing directory[/srv/ 
shared/system] action create (my_cookbook::default line 4) 
[2013-01-18T16:31:11+00:00] INFO: directory[/srv/shared/system] 

菜谱中的定义就像微指令,将资源分组并为其命名。定义有一个名称,可以通过该名称来区分它们,可以在菜谱内部调用,并且它有一个周界列表。

在定义中,我们有参数,在我们的代码中如下所示。

…..
directory "#{params[:deploy_to]}/releases"
directory "#{params[:deploy_to]}/shared"
directory "#{params[:deploy_to]}/shared/system"
……

它可以在默认菜谱中使用,如下所示。

capistrano_deploy_dirs do 
   deploy_to "/srv"` 
end