Skip to content

Instantly share code, notes, and snippets.

@matschaffer
Created June 8, 2012 15:30
Show Gist options
  • Star 32 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save matschaffer/2896172 to your computer and use it in GitHub Desktop.
Save matschaffer/2896172 to your computer and use it in GitHub Desktop.
Creating local encrypted data bags
require 'rubygems'
require 'chef/encrypted_data_bag_item'
secret = Chef::EncryptedDataBagItem.load_secret('data_bag_key')
data = {"id" => "mysql", "root" => "some secret password"}
encrypted_data = Chef::EncryptedDataBagItem.encrypt_data_bag_item(data, secret)
FileUtils.mkpath('data_bags/passwords')
File.open('data_bags/passwords/mysql.json', 'w') do |f|
f.print encrypted_data.to_json
end
@freegenie
Copy link

I'm using a variant of this, seems like the encrypted string is keeping the \n newline char at the end like this:

{"mysql"=>"7ovab42KoH1NhdwIu1YpLl1nBnxK+CLl30L45wpKlOE=\n"}

@matschaffer
Copy link
Author

It looks like base64 encoding so whitespace shouldn't pose a problem. Are you seeing an error?

@freegenie
Copy link

yes, sorry, it works fine.

@aaronjensen
Copy link

Here's a script that can be used to edit an encrypted databag in place. It makes some assumptions about paths but those are adjustable: https://gist.github.com/4123044

@kcd83
Copy link

kcd83 commented Aug 14, 2013

Very nice. Here is a generic script for taking a databag file and encrypting it https://gist.github.com/kcd83/6227767

@burnettk
Copy link

knife can now do this using the "from file" argument and the --local-mode (-z) flag. see https://docs.chef.io/knife_data_bag.html#from-file

@okram999
Copy link

Adding to @burnettk -- this is the specific command

$ knife data bag from file my_data_bag /path/to/data_bag_item.json -z --secret-file /path/to/encrypted_data_bag_secret

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment