เชฟ - ห้องสมุด

ห้องสมุดใน Chef เป็นสถานที่สำหรับห่อหุ้มตรรกะที่รวบรวมเพื่อให้สูตรตำราอาหารยังคงเรียบร้อยและสะอาด

การสร้างไลบรารี

Step 1 - สร้างวิธีการช่วยเหลือในห้องสมุดของตำราอาหาร

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb 
class Chef::Recipe 
def netmask(ipaddress) 
IPAddress(ipaddress).netmask 
end 
end

Step 2 - ใช้วิธีการช่วยเหลือ

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/recipes/default.rb 
ip = '10.10.0.0/24' 
mask = netmask(ip) # here we use the library method 
Chef::Log.info("Netmask of #{ip}: #{mask}")

Step 3 - อัปโหลดตำราอาหารที่แก้ไขไปยังเซิร์ฟเวอร์เชฟ

vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook 
Uploading my_cookbook [0.1.0]

การทดสอบไลบรารี

user@server $ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-18T14:38:26+00:00] INFO: Netmask of 10.10.0.0/24: 
255.255.255.0 
...TRUNCATED OUTPUT...

วิธีการทำงาน

รหัสห้องสมุด Chef สามารถเปิดคลาส Chef :: Recipe และเพิ่มวิธีการใหม่ได้ตามขั้นตอนที่ 1 ขั้นตอนนี้ไม่ใช่วิธีที่สะอาดที่สุด แต่เป็นวิธีที่ง่ายที่สุดในการทำ

class Chef::Recipe 
def netmask(ipaddress) 
... 
end 
end

ปฏิบัติที่ดีที่สุด

เมื่อเราเปิดคลาสเชฟ :: สูตรอาหารมีการเปลี่ยนแปลงที่ทำให้เกิดมลพิษ ตามแนวทางปฏิบัติที่ดีที่สุดมันเป็นวิธีที่ดีกว่าเสมอในการแนะนำคลาสย่อยใหม่ภายในไลบรารีและกำหนดวิธีการเป็นวิธีการของคลาส สิ่งนี้หลีกเลี่ยงการดึงเชฟ :: เนมสเปซสูตรอาหาร

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/libraries/ipaddress.rb 
class Chef::Recipe::IPAddress 
def self.netmask(ipaddress) 
IPAddress(ipaddress).netmask 
end 
end

เราสามารถใช้วิธีการในสูตรเช่น

IPAddress.netmask(ip)