Tôi có một bash sau (gọi là encrypted-databag.sh) trong thư mục làm việc đầu bếp của tôi:
#!/bin/bash -e
knife data bag $1 $2 $3 --secret-file ~/.chef/encrypted_data_bag_secret
if [ "$1" == "edit" ] ; then
knife data bag show $2 $3 -Fj > "./data_bags/$2/$3.json"
fi
Nó tiết kiệm cho tôi gõ mỗi khi tôi con dao để chỉ cho tôi cái túi dữ liệu được mã hóa. Và nó sẽ tự động cập nhật/lưu nó vào kho lưu trữ, khi tôi chỉnh sửa nó.
Cập nhật ngày 30.08.2013
Hạn chế của kịch bản trên là bạn chỉnh sửa túi dữ liệu của bạn thẳng vào bếp-server. Nhưng có một vấn đề khi bạn vẫn đang làm việc trên một số sách dạy nấu ăn và đã không tải lên nó, nhưng các túi dữ liệu đã có và được sử dụng bởi các phiên bản cũ của sách dạy nấu ăn. Bằng cách này khi đầu bếp-khách hàng được chạy trên một số nút, nó có thể dẫn đến một số lỗi.
Vì vậy, tôi đã suy nghĩ về việc chỉnh sửa túi dữ liệu được mã hóa cục bộ mà không cần đầu bếp-máy chủ và sau đó tải lên phiên bản mới của nó cùng với phiên bản mới của sách dạy nấu ăn (sau khi kiểm tra đã trôi qua). Vì vậy, đây là nhiệm vụ rake Tôi sử dụng ngay bây giờ để chỉnh sửa các túi dữ liệu đã mã hóa.
namespace 'databag' do
desc 'Edit encrypted databag item.'
task :edit, [:databag, :item, :secret_file] do |t, args|
args.with_defaults :secret_file => "#{ENV['HOME']}/.chef/encrypted_data_bag_secret"
secret = Chef::EncryptedDataBagItem.load_secret args.secret_file
item_file = "data_bags/#{args.databag}/#{args.item}.json"
tmp_item_file = "/tmp/#{args.databag}_#{args.item}.json"
begin
#decrypt data bag into tmp file
raw_hash = Chef::JSONCompat.from_json IO.read item_file
databag_item = Chef::EncryptedDataBagItem.new raw_hash, secret
IO.write tmp_item_file, Chef::JSONCompat.to_json_pretty(databag_item.to_hash)
#edit tmp file
sh "#{ENV['EDITOR']} #{tmp_item_file}"
#encrypt tmp file data bag into original file
raw_hash = Chef::JSONCompat.from_json IO.read tmp_item_file
databag_item = Chef::EncryptedDataBagItem.encrypt_data_bag_item raw_hash, secret
IO.write item_file, Chef::JSONCompat.to_json_pretty(databag_item)
ensure
::File.delete tmp_item_file #ensure tmp file deleted.
end
end
end
Bây giờ để sửa túi dữ liệu được mã hóa tôi sử dụng:
rake databag:edit[my_databag,item_in_databag]
Nguồn
2012-12-13 15:50:53
Tôi thích điều đó, cảm ơn bạn! – Mojo
Thông minh, cảm ơn! – allaire
Cảm ơn, Điều này đã giúp tôi với một vấn đề khác nhưng có liên quan, bây giờ tôi có thể mã hóa các thẻ dữ liệu trực tiếp từ ruby mà không cần liên hệ với máy chủ đầu bếp để làm điều đó, vì vậy cảm ơn, siêu hữu ích! nếu bạn muốn biết làm thế nào tôi đã làm nó, sau đó đi ở đây: http: //stackoverflow.com/questions/26978737/encrypt-data-bag-with-knife-from-inside-ruby – Thermatix