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 เป็นเนื้อหาและเขียนลงในดิสก์