class Chef::Knife::KeyEdit

Service class for UserKeyEdit and ClientKeyEdit, Implements common functionality of knife [user | org client] key edit.

@author Tyler Cloke

@attr_accessor [Hash] cli input, see UserKeyEdit and ClientKeyEdit for what could populate it

Attributes

config[RW]

Public Class Methods

new(original_name, actor, actor_field_name, ui, config) click to toggle source
# File lib/chef/knife/key_edit.rb, line 35
def initialize(original_name, actor, actor_field_name, ui, config)
  @original_name = original_name
  @actor = actor
  @actor_field_name = actor_field_name
  @ui = ui
  @config = config
end

Public Instance Methods

display_info(input) click to toggle source
# File lib/chef/knife/key_edit.rb, line 60
def display_info(input)
  @ui.info(input)
end
display_private_key(private_key) click to toggle source
# File lib/chef/knife/key_edit.rb, line 64
def display_private_key(private_key)
  @ui.msg(private_key)
end
edit_data(key) click to toggle source
# File lib/chef/knife/key_edit.rb, line 52
def edit_data(key)
  @ui.edit_data(key)
end
edit_hash(key) click to toggle source
# File lib/chef/knife/key_edit.rb, line 56
def edit_hash(key)
  @ui.edit_hash(key)
end
output_private_key_to_file(private_key) click to toggle source
# File lib/chef/knife/key_edit.rb, line 68
def output_private_key_to_file(private_key)
  File.open(@config[:file], "w") do |f|
    f.print(private_key)
  end
end
public_key_and_create_key_error_msg() click to toggle source
# File lib/chef/knife/key_edit.rb, line 43
      def public_key_and_create_key_error_msg
        <<~EOS
          You passed both --public-key and --create-key. Only pass one, or the other, or neither.
          Do not pass either if you do not want to change the public_key field of your key.
          Pass --public-key if you want to update the public_key field of your key from a specific public key.
          Pass --create-key if you want the server to generate a new key and use that to update the public_key field of your key.
        EOS
      end
run() click to toggle source
# File lib/chef/knife/key_edit.rb, line 78
def run
  key = Chef::Key.new(@actor, @actor_field_name)
  if @config[:public_key] && @config[:create_key]
    raise Chef::Exceptions::KeyCommandInputError, public_key_and_create_key_error_msg
  end

  if @config[:create_key]
    key.create_key(true)
  end

  if @config[:public_key]
    key.public_key(File.read(File.expand_path(@config[:public_key])))
  end

  if @config[:key_name]
    key.name(@config[:key_name])
  else
    key.name(@original_name)
  end

  if @config[:expiration_date]
    key.expiration_date(@config[:expiration_date])
  end

  output = edit_hash(key)
  key = update_key_from_hash(output)

  to_display = "Updated key: #{key.name}"
  to_display << " (formally #{@original_name})" if key.name != @original_name
  display_info(to_display)
  if key.private_key
    if @config[:file]
      output_private_key_to_file(key.private_key)
    else
      display_private_key(key.private_key)
    end
  end
end
update_key_from_hash(output) click to toggle source
# File lib/chef/knife/key_edit.rb, line 74
def update_key_from_hash(output)
  Chef::Key.from_hash(output).update(@original_name)
end