Chef - 環境變數



環境變數是使 Chef 菜譜在任何特定節點上成功執行的關鍵方法。有多種方法可以實現這一點,無論是手動設定還是使用 Shell 指令碼。此處需要執行的是透過菜譜設定它們。

為此,我們需要一個 Cookbook,這裡我們將使用 test_cookbook 和一個包含 test_cookbook 的執行列表。

使用 Chef 菜譜設定環境變數

步驟 1 - 使用環境變數更新 Cookbook 的預設菜譜。

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb  
ENV['MESSAGE'] = 'Testing environment variable update with chef !'  
execute 'print value of environment variable $MESSAGE' do 
   command 'echo $MESSAGE > /tmp/message' 
end

步驟 2 - 將更新後的 Cookbook 上傳到伺服器。

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

步驟 3 - 執行 Chef 客戶端以建立臨時檔案。

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-25T15:01:57+00:00] INFO: Processing execute[print 
value of environment variable $MESSAGE] action run 
(my_cookbook::default line 11) 
[2013-01-25T15:01:57+00:00] INFO: execute[print value of 
environment variable $MESSAGE] ran successfully 
...TRUNCATED OUTPUT... 

驗證變數

user@server:~$ cat /tmp/message 
Hello from Chef

工作方法

Ruby 透過 ENV(一個雜湊表)公開當前環境變數,以便讀取和修改環境變數。

執行資源

我們可以在 Cookbook 的 Chef 預設菜譜中使用 execute 資源來執行相同的操作。

mma@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb  
execute 'print value of environment variable $MESSAGE' do 
   command 'echo $MESSAGE > /tmp/message' 
   environment 'MESSAGE' => 'Hello from the execute resource' 
end 

注意 - 使用 ENV 設定環境變數將使該變數在整個 Chef 執行期間可用。相反,將其傳遞給 execute 資源只會使其對該資源執行的單個命令可用。

廣告
© . All rights reserved.