Chef - Đa nền tảng cho sách dạy nấu ăn

Sách dạy nấu ăn đa nền tảng là những sách dạy nấu ăn áp dụng một môi trường cơ bản mà nó sẽ chạy. Chef cung cấp một loạt các tính năng, giúp viết sách nấu ăn dạng chéo có khả năng chạy trên bất kỳ hệ điều hành nào mà nó sẽ được triển khai. Điều này giúp một nhà phát triển có thể viết một cuốn sách dạy nấu ăn hoàn chỉnh.

Để làm được điều này, chúng ta cần phải có một cuốn sách dạy nấu ăn. Trong trường hợp của chúng ta, nó sẽ là test_cookbook và một danh sách chạy sẽ có định nghĩa sách nấu ăn trong đó.

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

Việc truy xuất chi tiết nền tảng các nút và thực thi logic có điều kiện trong sách dạy nấu ăn của chúng tôi tùy thuộc vào nền tảng. Trong trường hợp của chúng tôi, chúng tôi sẽ kiểm tra nó cho Ubuntu.

Step 1 - Ghi nhật ký nếu nút là Ubuntu.

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Log.info("Running on ubuntu") if node.platform['ubuntu']

Step 2 - Tải sách nấu ăn lên máy chủ Chef.

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
Uploading my_cookbook [0.1.0] 
Uploaded 1 cookbook.

Step 3 - Chạy máy khách Chef trên nút.

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-03T20:07:39+00:00] INFO: Running on Ubuntu 
...TRUNCATED OUTPUT...

Ngoài ra, nếu một người không quan tâm đến một nền tảng cụ thể mà chỉ cần biết nền tảng khai báo nào đang sử dụng, thì có thể sử dụng câu lệnh sau.

Log.info("Running on a debian derivative") if 
platform_family?('debian')

Tải lên sách dạy nấu ăn đã sửa đổi và chạy ứng dụng khách Chef trên nút Ubuntu sẽ hiển thị kết quả sau.

[2013-03-03T20:16:14+00:00] INFO: Running on a debian 
derivative

Quy trình làm việc của Scripts

Trong lệnh trên, Ohai sẽ khám phá trạng thái hiện tại của hệ điều hành của nút và lưu trữ nó dưới dạng thuộc tính nền tảng với đối tượng nút.

node['platform']

Hoặc, bạn có thể sử dụng cú pháp kiểu phương thức -

node.platform

Đặt giá trị cụ thể cho nền tảng

Để thiết lập các giá trị cụ thể cho nền tảng, đầu bếp cung cấp các phương thức tiện lợi value_for_platform và value_for_platform_family. Chúng có thể được sử dụng để tránh các trường hợp phức tạp và thay vào đó sử dụng một hàm băm đơn giản.

Sách dạy nấu ăn ví dụ

execute "start-runsvdir" do 
   command value_for_platform( 
      "debian" => { "default" => "runsvdir-start" }, 
      "ubuntu" => { "default" => "start runsvdir" }, 
      "gentoo" => { "default" => "/etc/init.d/runit-start start" } 
   ) 
   action :nothing 
end

Trong ví dụ trên, lệnh dành riêng cho hệ điều hành như được định nghĩa.

  • Đối với Debian, "runningvdir-start" sẽ hoạt động
  • Đối với Ubuntu, "start runningvdir" sẽ hoạt động
  • Đối với Gentoo, "/etc/init.d/runit-start" sẽ hoạt động