Sha256: 2ab2b9f0f3197dc0e727fe0c0409836f15ee99e30e2b73a51d72c78d235e1c5a
Contents?: true
Size: 1.66 KB
Versions: 2
Compression:
Stored size: 1.66 KB
Contents
# -*- coding: utf-8 -*- require 'tmpdir' 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. end # # @return [Hash] {:private_key=>'pkey string', # :public_key=>'pubkey string'} def self.generate_key_pair() pkey = File.expand_path(randstr, Dir.tmpdir) pubkey = pkey + '.pub' begin system("ssh-keygen -q -t rsa -C '' -N '' -f %s >/dev/null" % [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 [pkey, pubkey].each { |i| File.unlink(i) if File.exist?(i) } end end def to_api_document to_hash end private def self.randstr Array.new(10) { (('a'..'z').to_a + (0..9).to_a)[rand(36)] }.join end end end
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
wakame-vdc-agents-11.06.0 | lib/dcmgr/models/ssh_key_pair.rb |
wakame-vdc-dcmgr-11.06.0 | lib/dcmgr/models/ssh_key_pair.rb |