class Chef::Knife::DataBagShow

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/data_bag_show.rb, line 36
def run
  display = case @name_args.length
            when 2 # Bag and Item names provided
              secret = encryption_secret_provided_ignore_encrypt_flag? ? read_secret : nil
              raw_data = Chef::DataBagItem.load(@name_args[0], @name_args[1]).raw_data
              encrypted = encrypted?(raw_data)

              if encrypted && secret
                # Users do not need to pass --encrypt to read data, we simply try to use the provided secret
                ui.info("Encrypted data bag detected, decrypting with provided secret.")
                raw = Chef::EncryptedDataBagItem.load(@name_args[0],
                  @name_args[1],
                  secret)
                format_for_display(raw.to_h)
              elsif encrypted && !secret
                ui.warn("Encrypted data bag detected, but no secret provided for decoding. Displaying encrypted data.")
                format_for_display(raw_data)
              else
                ui.warn("Unencrypted data bag detected, ignoring any provided secret options.") if secret
                format_for_display(raw_data)
              end

            when 1 # Only Bag name provided
              format_list_for_display(Chef::DataBag.load(@name_args[0]))
            else
              stdout.puts opt_parser
              exit(1)
            end
  output(display)
end