Chef - Tập lệnh cho túi dữ liệu

Trong một số điều kiện, không thể đặt máy chủ dưới sự kiểm soát hoàn toàn của Chef. Trong những trường hợp như vậy, người ta có thể cần truy cập các giá trị trong túi dữ liệu Chef từ các tập lệnh. Để làm được điều này, người ta cần lưu trữ các giá trị của túi dữ liệu trong tệp JSON và cho phép tập lệnh được thêm vào truy cập các giá trị đó.

Đối với điều này, một người cần phải có một cuốn sách nấu ăn. Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng test_cookbook như trước đó và nên có danh sách chạy của nút bao gồm định nghĩa test_cookbook trong đó.

Phương pháp làm việc

Step 1 - Tạo một túi dữ liệu.

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

Step 2 - Tạo một mục túi dữ liệu.

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

Step 3 - Cập nhật mục túi dữ liệu.

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

Sử dụng trong Sách dạy nấu ăn

Step 1 - Cần tạo một tệp JSON chứa các giá trị túi dữ liệu bằng cách sử dụng sách dạy nấu ăn trên để các tập lệnh bên ngoài có thể truy cập các giá trị đó.

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 - Tải test_cookbook lên máy chủ Chef.

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

Step 3 - Chạy máy khách Chef trên nút.

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 - Xác thực nội dung của tệp JSON đã tạo.

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

Quy trình làm việc của Scripts

Trong lệnh trên, tài nguyên tệp mà chúng tôi đã sử dụng để tạo tệp JSON bên trong /etcthư mục được xác định trong sách nấu ăn mặc định. Nó lấy nội dung tệp trực tiếp từ túi dữ liệu bằng phương thức data_bag_item. Chúng tôi truy cập các giá trị máy chủ từ mục túi dữ liệu và chuyển đổi nó thành JSON. Tài nguyên tệp sử dụng các giá trị được chuyển đổi JSON làm nội dung của nó và ghi nó vào đĩa.