Chef - 数据包
Chef 数据包可以定义为可与菜谱一起使用的任意数据集合。当人们不想在菜谱中硬编码属性,也不想在菜谱中存储属性时,使用数据包非常有用。
工作方法
在以下设置中,我们尝试与 http 端点 URL 通信。为此,我们需要创建一个数据包,它将保存端点 URL 详细信息并在我们的菜谱中使用它。
步骤 1 − 为我们的数据包创建一个目录。
mma@laptop:~/chef-repo $ mkdir data_bags/hooks
步骤 2 − 为请求箱创建一个数据包项。需要确保使用定义的 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(食谱)的默认Kitchen(配方),以便从数据包中接收所需的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 文件中调用数据包项。还可以从Kitchen(配方)中搜索数据包项以使用存储在数据包中的数据。
我们创建了一个名为 hooks 的数据包。数据包是 Chef 存储库内的目录。我们使用 Knife 在服务器上创建它。