เชฟ - ทับทิมธรรมดากับเชฟ 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 และกำหนดค่าให้กับมันได้