Ich habe folgende bash (genannt encrypted-databag.sh) in meinem Koch-Arbeitsverzeichnis:
#!/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
Das spart ich jedesmal, wenn ich Messer eingeben mir die verschlüsselten Daten Tasche zu zeigen. Und es wird automatisch aktualisiert/speichert es in das Repository, wenn ich es bearbeite.
auf 2013.08.30
Aktualisiert oben
Der Nachteil des Skripts ist, dass Sie Ihre Daten Tasche gerade auf Koch-Server bearbeiten. Aber es gibt ein Problem, wenn du noch an einem Kochbuch arbeitest und es nicht hochgeladen hast, sondern den Datenbeutel schon dort hast und von der älteren Version des Kochbuchs benutzt wird. Wenn der Chef-Client auf einem Knoten ausgeführt wird, kann dies zu einigen Fehlern führen.
Also überlegte ich, den verschlüsselten Datenbeutel lokal, ohne Chef-Server zu bearbeiten und dann die neue Version zusammen mit der neuen Version des Kochbuchs hochzuladen (nachdem die Tests bestanden wurden). Also hier ist die Rake Aufgabe, die ich jetzt verwende, um verschlüsselte Datensäcke zu bearbeiten.
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
Jetzt verschlüsselten Daten Tasche zu bearbeiten ich benutze:
rake databag:edit[my_databag,item_in_databag]
Ich mag, dass es Ihnen danken! – Mojo
Clever, danke! – allaire
Danke, Dies half mir mit einem anderen, aber verwandten Problem, ich kann jetzt Databags direkt von Ruby verschlüsseln, ohne den Chef-Server kontaktieren zu müssen, damit es tut, also danke, super hilfreich! Wenn Sie wissen wollten, wie ich es gemacht habe, dann gehen Sie hier: http: //stackoverflow.com/questions/26978737/encrypt-data-bag-with-knife-from-inside-ruby – Thermatix