Chef - สคริปต์สำหรับกระเป๋าข้อมูล

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

สำหรับสิ่งนี้ต้องมีตำราอาหาร ในกรณีของเราเราจะใช้ test_cookbook เหมือนก่อนหน้านี้และควรมีรายการ run ของโหนดรวมถึงคำจำกัดความ test_cookbook อยู่ด้วย

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

Step 1 - สร้างกระเป๋าข้อมูล

vipin@laptop:~/chef-repo $ mkdir data_bags/servers 
vipin@laptop:~/chef-repo $ knife data bag create servers 
Created data_bag[servers]

Step 2 - สร้างรายการกระเป๋าข้อมูล

vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

Step 3 - อัปเดตรายการกระเป๋าข้อมูล

vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

ใช้ในตำราอาหาร

Step 1 - ต้องสร้างไฟล์ JSON ที่มีค่าถุงข้อมูลโดยใช้ตำราอาหารข้างต้นเพื่อให้สคริปต์ภายนอกสามารถเข้าถึงค่าเหล่านั้นได้

vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
file "/etc/backup_config.json" do 
   owner "root"
   group "root" 
   mode 0644 
   content data_bag_item('servers', 'backup')['host'].to_json 
end

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

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

Step 3 - เรียกใช้ไคลเอ็นต์ Chef บนโหนด

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-14T20:30:33+00:00] INFO: Processing 
file[/etc/backup_config.json] action create 
(my_cookbook::default line 9) 
[2013-03-14T20:30:34+00:00] INFO: entered create 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] owner changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] group changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] mode changed to 644 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] created file 
/etc/backup_config.json 
...TRUNCATED OUTPUT...

Step 4 - ตรวจสอบเนื้อหาของไฟล์ JSON ที่สร้างขึ้น

user@server:~$ cat /etc/backup_config.json 
"10.0.0.12"

เวิร์กโฟลว์ของสคริปต์

ในคำสั่งด้านบนทรัพยากรไฟล์ที่เราใช้ซึ่งสร้างไฟล์ JSON ภายในไฟล์ /etcไดเร็กทอรีถูกกำหนดไว้ในตำราอาหารเริ่มต้น รับเนื้อหาไฟล์โดยตรงจากกระเป๋าข้อมูลโดยใช้เมธอด data_bag_item เราเข้าถึงค่าโฮสต์จากรายการถุงข้อมูลและแปลงเป็น JSON ทรัพยากรไฟล์ใช้ค่าที่แปลงเป็น JSON เป็นเนื้อหาและเขียนลงในดิสก์