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