class Chef::Knife::SecureBagEdit
Public Instance Methods
run()
click to toggle source
# File lib/chef/knife/secure_bag_edit.rb, line 18 def run if @name_args.length != 2 stdout.puts 'You must supply the data bag and an item to edit.' stdout.puts opt_parser exit 1 end config_defaults_for_data_bag!(@name_args[0]) # Load the SecureBagItem, EncryptedDataBagItem or DataBagItem item = load_item(@name_args[0], @name_args[1], config_metadata) item_metadata = item.metadata.dup item.encryption_format = 'plain' # Allow the user to modify the content data = item.to_hash(metadata: true) data[::SecureDataBag::METADATA_KEY] = item_metadata # Edit the hash edited_item = edit_hash(data) item_metadata = edited_item.delete(::SecureDataBag::METADATA_KEY) # Generate a new SecureBagItem item_to_save = ::SecureDataBag::Item .from_hash(edited_item, item_metadata) item_to_save.data_bag @name_args[0] item_to_save['id'] = @name_args[1] item_to_save.save stdout.puts("Saved as #{@name_args[0]}[#{@name_args[1]}]") export!(@name_args[0], @name_args[1], item_to_save) if should_export? if config[:print_after] data_to_print = item_to_save.to_hash stdout.puts(Chef::JSONCompat.to_json_pretty(data_to_print)) end end