Chef - การกำหนดค่าสูตรอาหารแบบไดนามิก

แอตทริบิวต์เป็นองค์ประกอบหลักสำหรับการกำหนดค่าตำราอาหารแบบไดนามิก แอตทริบิวต์ช่วยให้ผู้เขียนสามารถกำหนดค่าตำราอาหารได้ ด้วยการลบล้างค่าเริ่มต้นที่ตั้งไว้ในตำราอาหารผู้ใช้สามารถฉีดค่าของตนเองได้

Step 1 - สร้างไฟล์เริ่มต้นสำหรับแอตทริบิวต์ตำราอาหารและเพิ่มแอตทริบิวต์เริ่มต้นลงไป

vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/attributes/default.rb 
default['my_cookbook']['message'] = 'hello world!'

Step 2 - กำหนดคุณสมบัติภายในสูตร

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb 
message = node['my_cookbook']['message'] 
Chef::Log.info("** Saying what I was told to say: #{message}")

Step 3 - อัปโหลดตำราอาหารที่แก้ไขแล้ว

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

Step 4 - เรียกใช้ Chef-Client ของโหนดที่กำหนด

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-13T20:48:21+00:00] INFO: ** Saying what I was told to 
say: hello world! 
...TRUNCATED OUTPUT...

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

Chef โหลดแอตทริบิวต์ทั้งหมดจากไฟล์แอตทริบิวต์ก่อนที่จะดำเนินการ แอ็ตทริบิวต์ถูกเก็บไว้กับอ็อบเจ็กต์โหนด หนึ่งสามารถเข้าถึงแอตทริบิวต์ทั้งหมดที่เก็บไว้กับวัตถุโหนดภายในสูตรอาหารและดึงค่าปัจจุบันของพวกเขา

Chef มีโครงสร้างที่ จำกัด โดยเริ่มจากค่าเริ่มต้นเป็นค่าต่ำสุดจากนั้นมาเป็นแบบปกติ (ซึ่งใช้นามแฝงกับชุด) แล้วจึงแทนที่ ระดับแอตทริบิวต์ที่กำหนดในสูตรอาหารมีความสำคัญเหนือกว่าระดับเดียวกันที่กำหนดในไฟล์แอตทริบิวต์

การลบล้างแอตทริบิวต์ที่ระดับโหนดและสภาพแวดล้อม

แอตทริบิวต์ที่กำหนดไว้ในบทบาทหรือสภาพแวดล้อมมีความสำคัญสูงสุด

Step 1 - สร้างบทบาท

vipin@laptop:~/chef-repo $ subl roles/german_hosts.rb 
name "german_hosts" 
description "This Role contains hosts, which should print out 
their messages in German" 
run_list "recipe[my_cookbook]" 
default_attributes "my_cookbook" => { "message" => "Hallo Welt!" }

Step 2 - อัปโหลดบทบาทไปยังเซิร์ฟเวอร์ Chef

vipin@laptop:~/chef-repo $ knife role from file german_hosts.rb 
Updated Role german_hosts!

Step 3 - กำหนดบทบาทให้กับโหนด

vipin@laptop:~/chef-repo $ knife node edit server 
"run_list": [ 
   "role[german_hosts]" 
] 
Saving updated run_list on node server

Step 4 - เรียกใช้ Chef-Client

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-13T20:49:49+00:00] INFO: ** Saying what I was told to 
say: Hallo Welt! 
...TRUNCATED OUTPUT...