Chef - 轻量级资源提供程序

轻量级资源提供程序 (LWRP) 提供了通过扩展其功能来扩展可用资源列表的选项,并允许 Chef 用户创建自定义资源。

通过创建自定义资源,人们可以简单地编写Cookbook(食谱),因为人们可以使用 Chef DSL 拥有丰富的自定义资源,这有助于使Cookbook(食谱)代码更具表现力。

在 Chef 社区中,许多自定义资源都是使用 LWRP 实现的。有许多 LWRP 的工作示例,例如 iptables_rulesapt_repository

工作方法

确保有名为 Testing_resource 的Cookbook(食谱)和包含 Testing_resource Cookbook(食谱)的节点的 run_list。

构建 LWRP

步骤 1 −在 Testing_resource cookbook 中创建自定义资源。

vipin@laptop:~/chef-repo $ subl cookbooks/Testing_resource/resources/default.rb
actions :create, :remove
attribute :title, kind_of: String, default: "World"
attribute :path, kind_of: String, default: "/tmp/greeting.txt"

步骤 2 − 在 Tesing_resource cookbook 中为资源创建提供程序。

vipin@laptop:~/chef-repo $ subl cookbooks/Testing_resource/provider/default.rb 
action :create do 
   log "Adding '#{new_resource.name}' greeting as #{new_resource. 
      path}" 
   file new_resource.path do 
      content "#{new_resource.name}, #{new_resource.title}!" 
      action :create 
end  
action :remove do 
   Chef::Log.info "Removing '#{new_resource.name}' greeting #{new_resource.path}" 
   file new_resource.path do 
      action :delete 
   end 
end 

步骤 3 − 通过编辑 Testing_resource 默认Kitchen(配方)来使用新资源。

vipin@laptop:~/chef-repo $ subl cookbooks/Tesing_resource/recipes/default.rb
greeting "Ohai" do
title "Chef"
action :create
end

步骤 4 − 将修改后的Cookbook(食谱)上传到 Chef 服务器。

vipin@laptop:~/chef-repo $ knife cookbook upload Greeting
Uploading Greeting [0.1.0]

步骤 5 − 在节点上运行 Chef-Client。

vipin@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
2013-06-28T21:32:54+00:00] INFO: Processing greeting[Ohai] action 
create (greeting::default line 9) 
[2013-06-28T21:32:54+00:00] INFO: Adding 'Ohai' greeting as /tmp/ 
greeting.txt 
[2013-06-28T21:32:54+00:00] INFO: Processing file[/tmp/greeting. 
txt] action create (/srv/chef/file_store/cookbooks/greeting/ 
providers/default.rb line 7) 
[2013-06-28T21:32:54+00:00] INFO: entered create 
[2013-06-28T21:32:54+00:00] INFO: file[/tmp/greeting.txt] created 
file /tmp/greeting.txt 
...TRUNCATED OUTPUT... 

步骤 6 − 验证生成文件的内容。

user@server:~$ cat /tmp/greeting.txt
Ohai, Chef!

工作流脚本

LWRP 存在于Cookbook(食谱)中。自定义资源存在于Cookbook(食谱)中,并将以Cookbook(食谱)名称提供。在工作流中,我们首先定义定义,然后将属性传递给Cookbook(食谱)中将要使用的资源。最后,我们在Kitchen(配方)中使用这些操作和属性。