Chef 轻量资源提供
轻量级资源提供程序 (LWRP) 提供了通过扩展可用资源列表的功能来扩展可用资源列表的选项,并允许 Chef 用户创建自定义资源。
通过创建自定义资源,您可以简单地编写Cookbook,因为您可以使用 Chef DSL 拥有丰富的自定义资源,这有助于使Cookbook代码更具表现力。
在 Chef 社区中,许多自定义资源都是使用 LWRP 实现的。有许多 LWRP 的工作示例,例如
iptables_rules 和
apt_repository。
工作方法
确保有说明书名称 Testing_resource 和包含 Testing_resource 说明书的节点的 run_list。
构建 LWRP
步骤 1-在 Testing_resource 说明书中创建自定义资源。
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 说明书中为资源创建一个提供者。
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 默认配方使用新资源。
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中。自定义资源位于说明书中,并且可以在说明书名称下使用。在工作流中,首先我们定义定义,然后将属性传递给将在说明书中使用的资源。最后,我们在配方中使用这些操作和属性。