Chef - Biến môi trường

Biến môi trường là một cách quan trọng để làm cho công thức Chef chạy thành công trên bất kỳ nút cụ thể nào. Có nhiều cách để thực hiện, hoặc thiết lập chúng theo cách thủ công hoặc bằng cách sử dụng tập lệnh Shell. Đặt chúng qua công thức là những gì chúng ta cần thực hiện ở đây.

Để làm điều này, chúng ta cần có một sách dạy nấu ăn, ở đây chúng ta sẽ sử dụng test_cookbook và một danh sách chạy có chứa test_cookbook.

Cài đặt biến môi trường bằng công thức đầu bếp

Step 1 - Cập nhật công thức mặc định của sách nấu ăn với một biến môi trường.

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

Step 2 - Tải sách nấu ăn cập nhật lên máy chủ.

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

Step 3 - Chạy máy khách Chef để tạo tệp tạm thời.

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...

Biến hợp lệ

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

Phương pháp làm việc

Ruby hiển thị biến môi trường hiện tại thông qua ENV –a băm để đọc và sửa đổi biến môi trường.

Tài nguyên thực thi

Chúng ta có thể sử dụng tài nguyên thực thi để thực hiện điều tương tự bên trong công thức nấu ăn mặc định của Chef.

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

Note- Đặt một biến môi trường bằng ENV sẽ làm cho biến đó khả dụng trong toàn bộ quá trình Chef chạy. Ngược lại, chuyển nó đến tài nguyên thực thi sẽ chỉ làm cho nó có sẵn cho một lệnh được tài nguyên đó thực thi.