Chef - Công thức cấu hình động
Các thuộc tính là thành phần quan trọng để định cấu hình động sách nấu ăn. Các thuộc tính cho phép các tác giả đặt sách nấu ăn có thể định cấu hình. Bằng cách ghi đè các giá trị mặc định được đặt trong sách dạy nấu ăn, người dùng có thể nhập các giá trị của riêng họ.
Step 1 - Tạo một tệp mặc định cho các thuộc tính sách nấu ăn và thêm một thuộc tính mặc định cho nó.
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/attributes/default.rb
default['my_cookbook']['message'] = 'hello world!'
Step 2 - Xác định thuộc tính bên trong công thức.
vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb
message = node['my_cookbook']['message']
Chef::Log.info("** Saying what I was told to say: #{message}")
Step 3 - Tải lên sách nấu ăn đã sửa đổi.
vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook
Uploading my_cookbook [0.1.0]
Step 4 - Chạy Chef-Client của nút đã xác định.
user@server:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-13T20:48:21+00:00] INFO: ** Saying what I was told to
say: hello world!
...TRUNCATED OUTPUT...
Phương pháp làm việc
Chef tải tất cả các thuộc tính từ tệp thuộc tính trước khi nó thực thi chúng. Các thuộc tính được lưu trữ với đối tượng nút. Người ta có thể truy cập tất cả các thuộc tính được lưu trữ với đối tượng nút trong công thức nấu ăn và truy xuất các giá trị hiện tại của chúng.
Chef có cấu trúc hạn chế bắt đầu từ mặc định là thấp nhất, sau đó trở thành bình thường (được đặt bí danh với bộ) và sau đó ghi đè. Cấp thuộc tính được đặt trong công thức được ưu tiên hơn cấp thuộc tính được đặt trong tệp thuộc tính.
Ghi đè thuộc tính ở cấp độ nút và môi trường
Thuộc tính được xác định trong vai trò hoặc môi trường có mức độ ưu tiên cao nhất.
Step 1 - Tạo vai trò.
vipin@laptop:~/chef-repo $ subl roles/german_hosts.rb
name "german_hosts"
description "This Role contains hosts, which should print out
their messages in German"
run_list "recipe[my_cookbook]"
default_attributes "my_cookbook" => { "message" => "Hallo Welt!" }
Step 2 - Tải vai trò lên máy chủ Chef.
vipin@laptop:~/chef-repo $ knife role from file german_hosts.rb
Updated Role german_hosts!
Step 3 - Gán vai trò cho một nút.
vipin@laptop:~/chef-repo $ knife node edit server
"run_list": [
"role[german_hosts]"
]
Saving updated run_list on node server
Step 4 - Điều hành Chef-Client.
user@server:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-13T20:49:49+00:00] INFO: ** Saying what I was told to
say: Hallo Welt!
...TRUNCATED OUTPUT...