เชฟ - ทับทิมธรรมดากับเชฟ DSL
ใน Chef หากต้องการสร้างสูตรอาหารง่ายๆเราสามารถใช้ทรัพยากรที่มีอยู่ใน Chef เช่นเทมเพลต remote_file และบริการ อย่างไรก็ตามเมื่อสูตรอาหารมีความซับซ้อนเราก็ต้องใช้เทคนิคขั้นสูงเช่นข้อความที่มีเงื่อนไขเพื่อดำเนินการบางส่วนของสูตรตามเงื่อนไข นี่คือพลังของการผสม Ruby ธรรมดากับภาษาเฉพาะของ Chef Domain (DSL)
วิธีการใช้งาน
เริ่ม Chef Shell บนโหนดใดก็ได้ในโหมดไคลเอนต์เพื่อให้สามารถเข้าถึงเซิร์ฟเวอร์ 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>
เงื่อนไขพื้นฐานกับ Chef DSL
เรียงโหนดตามชื่อโดยใช้ Ruby ธรรมดา
chef > nodes.sort! {|a,b| a.name <=> b.name }
=> [node[alice],node[server]]
วนรอบโหนดพิมพ์ระบบปฏิบัติการ
chef > nodes.each do |n|
chef > puts n['os']
chef ?>
end
linux
windows
=> [node[server], node[alice]]
ติดตั้งอัญมณี Ruby หลายตัวโดยใช้อาร์เรย์การขยายวงและสตริงเพื่อสร้างชื่ออัญมณี
chef > %w{ec2 essentials}.each do |gem|
chef > gem_package "knife-#{gem}"
chef ?> end => ["ec2", "essentials"]
วิธีการทำงาน
สูตรอาหารของเชฟคือไฟล์ Ruby ซึ่งได้รับการประเมินในบริบทของ Chef run พวกเขาสามารถมีรหัส Ruby ธรรมดาเช่นคำสั่ง if และลูปเช่นเดียวกับองค์ประกอบ Chef DSL เช่นทรัพยากร
ภายในสูตรสามารถประกาศตัวแปร Ruby และกำหนดค่าให้กับมันได้