class Chef::Knife::VaultEdit

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/vault_edit.rb, line 30
def run
  vault = @name_args[0]
  item = @name_args[1]

  set_mode(config[:vault_mode])

  if vault && item
    begin
      vault_item = ChefVault::Item.load(vault, item)

      filtered_vault_data = vault_item.raw_data.select { |x| x != "id" }

      updated_vault_json = edit_hash(filtered_vault_data)

      # Clean out contents of existing local vault_item
      vault_item.raw_data.each do |key, _|
        vault_item.remove(key) unless key == "id"
      end

      # write new vault_item key/value pairs
      updated_vault_json.each do |key, value|
        vault_item[key] = value
      end

      vault_item.save
    rescue ChefVault::Exceptions::KeysNotFound,
           ChefVault::Exceptions::ItemNotFound
      raise ChefVault::Exceptions::ItemNotFound,
        "#{vault}/#{item} does not exist, "\
        "use 'knife vault create' to create."
    end
  else
    show_usage
  end
end