Chef - 数据包



Chef 数据包可以定义为任意数据集合,可以与 Cookbook 一起使用。当不希望在菜谱中硬编码属性或在 Cookbook 中存储属性时,使用数据包非常有用。

工作方法

在以下设置中,我们尝试与 http 端点 URL 通信。为此,我们需要创建一个数据包,其中将包含端点 URL 详细信息并在我们的菜谱中使用它。

步骤 1 - 为我们的数据包创建一个目录。

mma@laptop:~/chef-repo $ mkdir data_bags/hooks

步骤 2 - 为请求 bin 创建一个数据包项。需要确保正在使用定义的 requestBin URL。

vipi@laptop:~/chef-repo $ subl data_bags/hooks/request_bin.json { 
   "id": "request_bin", 
   "url": "http://requestb.in/1abd0kf1" 
}

步骤 3 - 在 Chef 服务器上创建数据包

vipin@laptop:~/chef-repo $ knife data bag create hooks 
Created data_bag[hooks] 

步骤 4 - 将数据包上传到 Chef 服务器。

vipin@laptop:~/chef-repo $ knife data bag from file hooks requestbin.json 
Updated data_bag_item[hooks::RequestBin]

步骤 5 - 更新 Cookbook 的默认菜谱以从数据包接收所需的 Cookbook。

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/recipes/default.rb 
hook = data_bag_item('hooks', 'request_bin') 
http_request 'callback' do 
   url hook['url'] 
end 

步骤 6 - 将修改后的 Cookbook 上传到 Chef 服务器。

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

步骤 7 - 在节点上运行 Chef 客户端以检查 http 请求 bin 是否已执行。

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-02-22T20:37:35+00:00] INFO: http_request[callback] 
GET to http://requestb.in/1abd0kf1 successful 
...TRUNCATED OUTPUT...

工作原理

数据包是结构化数据条目的命名集合。需要定义数据条目并在 JSON 文件中调用数据包项。还可以从菜谱中搜索数据包项以使用存储在数据包中的数据。

我们创建了一个名为 hooks 的数据包。数据包是 Chef 存储库中的一个目录。我们使用 knife 在服务器上创建它。

广告