Chef - Plain Ruby với Chef DSL
Trong Chef, nếu cần tạo các công thức nấu ăn đơn giản, người ta có thể sử dụng các tài nguyên có sẵn trong Chef, chẳng hạn như các mẫu, remote_file và các dịch vụ. Tuy nhiên, khi các công thức nấu ăn trở nên phức tạp, người ta cần các kỹ thuật nâng cao, chẳng hạn như câu lệnh điều kiện để thực hiện các phần của công thức một cách có điều kiện. Đây là sức mạnh của việc trộn Ruby thuần túy với Ngôn ngữ dành riêng cho miền Chef (DSL).
Làm thế nào để sử dụng nó?
Khởi động Chef Shell trên bất kỳ nút nào trong chế độ máy khách để có thể truy cập máy chủ Chef.
user@server:~$ sudo chef-shell --client
loading configuration: /etc/chef/client.rb
Session type: client
...TRUNCATED OUTPUT...
run `help' for help, `exit' or ^D to quit.
Ohai2u user@server!
Chef>
Các điều kiện cơ bản với Chef DSL
Sắp xếp các nút theo tên bằng Ruby đơn giản.
chef > nodes.sort! {|a,b| a.name <=> b.name }
=> [node[alice],node[server]]
Lặp qua các nút, in hệ điều hành của chúng.
chef > nodes.each do |n|
chef > puts n['os']
chef ?>
end
linux
windows
=> [node[server], node[alice]]
Cài đặt nhiều đá quý Ruby bằng cách sử dụng mở rộng mảng, vòng lặp và chuỗi để tạo tên đá quý.
chef > %w{ec2 essentials}.each do |gem|
chef > gem_package "knife-#{gem}"
chef ?> end => ["ec2", "essentials"]
Phương pháp làm việc
Công thức nấu ăn của Chef là các tệp Ruby, được đánh giá trong bối cảnh Chef run. Chúng có thể chứa mã Ruby thuần túy như câu lệnh if và các vòng lặp cũng như các phần tử Chef DSL như tài nguyên.
Bên trong công thức, người ta có thể chỉ cần khai báo các biến Ruby và gán giá trị cho nó.