Chef - 使用食譜的 Ruby Gems



食譜是 Cookbook 的關鍵構建塊,它基本上是 Ruby 程式碼。可以在 Chef 食譜中使用所有 Ruby 語言功能。大多數情況下,Ruby 內建功能就足夠了,但有時可能需要使用額外的 Ruby gems。例如,如果需要從食譜本身訪問 MySQL 資料庫。

Chef 食譜能夠獲取所需的 Ruby gems 以在同一個食譜中使用它們。

在給定食譜中使用 iptable Gem

步驟 1 - 編輯 Cookbook 的預設食譜並安裝要在食譜中使用的 gem。

vipin@laptop:~/chef-repo $ subl 
cookbooks/my_cookbook/recipes/default.rb 
chef_gem 'ipaddress' 
require 'ipaddress' 
ip = IPAddress("192.168.0.1/24") 
Chef::Log.info("Netmask of #{ip}: #{ip.netmask}")

步驟 2 - 將修改後的 Cookbook 上傳到 Chef 伺服器。

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

步驟 3 - 執行 Chef 客戶端以檢視輸出。

user@server $ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-18T14:02:02+00:00] INFO: Netmask of 192.168.0.1: 
255.255.255.0 
...TRUNCATED OUTPUT...

工作方法

Chef 執行步驟包括編譯階段,在此階段它會編譯所有資源,以及執行階段,在此階段 Chef 執行資源提供程式以使節點收斂到所需狀態。如果在 Cookbook 中需要任何特定的 Ruby gem,則需要在編譯階段安裝該 gem。

chef_gem 資源將完全執行相同的操作,並且在 Chef 中,Omnibus 是唯一可行的方法。其主要功能是使 Chef 本身可以使用 gems。

廣告