class Chef::Knife::KeyCreate

Service class for UserKeyCreate and ClientKeyCreate, Implements common functionality of knife [user | org client] key create.

@author Tyler Cloke

@attr_accessor [Hash] cli input, see UserKeyCreate and ClientKeyCreate for what could populate it

Attributes

config[RW]

Public Class Methods

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

Public Instance Methods

create_key_from_hash(output) click to toggle source
# File lib/chef/knife/key_create.rb, line 72
def create_key_from_hash(output)
  Chef::Key.from_hash(output).create
end
display_info(input) click to toggle source
# File lib/chef/knife/key_create.rb, line 58
def display_info(input)
  @ui.info(input)
end
display_private_key(private_key) click to toggle source
# File lib/chef/knife/key_create.rb, line 62
def display_private_key(private_key)
  @ui.msg(private_key)
end
edit_data(key) click to toggle source
# File lib/chef/knife/key_create.rb, line 50
def edit_data(key)
  @ui.edit_data(key)
end
edit_hash(key) click to toggle source
# File lib/chef/knife/key_create.rb, line 54
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_create.rb, line 66
def output_private_key_to_file(private_key)
  File.open(@config[:file], "w") do |f|
    f.print(private_key)
  end
end
public_key_or_key_name_error_msg() click to toggle source
# File lib/chef/knife/key_create.rb, line 42
      def public_key_or_key_name_error_msg
        <<EOS
You must pass either --public-key or --key-name, or both.
If you only pass --public-key, a key name will be generated from the fingerprint of your key.
If you only pass --key-name, a key pair will be generated by the server.
EOS
      end
run() click to toggle source
# File lib/chef/knife/key_create.rb, line 76
def run
  key = Chef::Key.new(@actor, @actor_field_name)
  if !@config[:public_key] && !@config[:key_name]
    raise Chef::Exceptions::KeyCommandInputError, public_key_or_key_name_error_msg
  elsif !@config[:public_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])
  end

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

  output = edit_hash(key)
  key = create_key_from_hash(output)

  display_info("Created key: #{key.name}")
  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