lib/dcmgr/models/ssh_key_pair.rb in wakame-vdc-dcmgr-11.06.0 vs lib/dcmgr/models/ssh_key_pair.rb in wakame-vdc-dcmgr-11.12.0

- old
+ new

@@ -5,47 +5,35 @@ module Dcmgr::Models # SSH Key database for account. class SshKeyPair < AccountResource taggable 'ssh' - inheritable_schema do - String :name, :size=>100, :null=>false - String :finger_print, :size=>100, :null=>false - Text :public_key, :null=>false - Text :private_key, :null=>true - - index [:account_id, :name], {:unique=>true} - end - with_timestamps - - def validate - end - def before_destroy # TODO: check running instances which are associated to ssh key # pairs. reject deletion if exist. + super end - # + # # @return [Hash] {:private_key=>'pkey string', # :public_key=>'pubkey string'} - def self.generate_key_pair() + def self.generate_key_pair(name) pkey = File.expand_path(randstr, Dir.tmpdir) pubkey = pkey + '.pub' begin - system("ssh-keygen -q -t rsa -C '' -N '' -f %s >/dev/null" % [pkey]) + system("ssh-keygen -q -t rsa -C '%s' -N '' -f %s >/dev/null" % [name, pkey]) unless $?.exitstatus == 0 raise "Failed to run ssh-keygen: exitcode=#{$?.exitstatus}" end # get finger print of pkey file fp = `ssh-keygen -l -f #{pkey}` unless $?.exitstatus == 0 raise "Failed to collect finger print value" end fp = fp.split(/\s+/)[1] - + {:private_key=>IO.read(pkey), :public_key=>IO.read(pubkey), :finger_print => fp} rescue # clean up tmp key files @@ -54,15 +42,24 @@ } end end def to_api_document - to_hash + super end + def self.entry_new(account, &blk) + raise ArgurmentError unless account.is_a?(Account) + + ssh = self.new &blk + ssh.account_id = account.canonical_uuid + + ssh + end + private def self.randstr Array.new(10) { (('a'..'z').to_a + (0..9).to_a)[rand(36)] }.join end - + end end