From: Michal Fojtik <mfoj...@redhat.com>

- Added :authentication_key feature to instances

Signed-off-by: Michal fojtik <mfoj...@redhat.com>
---
 .../drivers/digitalocean/digitalocean_driver.rb    | 51 +++++++++++++++++++++-
 server/lib/deltacloud/models/base_model.rb         |  2 +
 server/lib/deltacloud/models/key.rb                |  2 +-
 server/views/keys/index.html.haml                  |  1 +
 server/views/keys/show.html.haml                   | 12 +++--
 server/views/keys/show.xml.haml                    |  5 ++-
 6 files changed, 64 insertions(+), 9 deletions(-)

diff --git a/server/lib/deltacloud/drivers/digitalocean/digitalocean_driver.rb 
b/server/lib/deltacloud/drivers/digitalocean/digitalocean_driver.rb
index 2868e93..fbfc987 100644
--- a/server/lib/deltacloud/drivers/digitalocean/digitalocean_driver.rb
+++ b/server/lib/deltacloud/drivers/digitalocean/digitalocean_driver.rb
@@ -20,7 +20,7 @@ module Deltacloud
     module Digitalocean
       class DigitaloceanDriver < Deltacloud::BaseDriver
 
-        feature :instances, :user_name
+        feature :instances, :user_name, :authentication_key
         feature :images, :owner_id
 
         define_instance_states do
@@ -45,7 +45,7 @@ module Deltacloud
               size = do_client.get("sizes/#{opts[:id]}")["size"]
               results << hardware_profile_from(size)
             else
-              sizes = do_client.get("sizes")["sizes"].each do |s|
+              do_client.get("sizes")["sizes"].each do |s|
                 size = do_client.get("sizes/#{s['id']}")["size"]
                 results << hardware_profile_from(size)
               end
@@ -136,6 +136,7 @@ module Deltacloud
             args.merge!(:region_id => opts[:realm_id]) if opts[:realm_id]
             args.merge!(:size_id => opts[:hwp_id]) if opts[:hwp_id]
             args.merge!(:name => opts[:name] || "inst#{Time.now.to_i}")
+            args.merge!(:ssh_key_ids => opts[:keyname]) if opts[:keyname]
             convert_instance(
               credentials.user,
               client.get("droplets/new", args)['droplet']
@@ -167,6 +168,42 @@ module Deltacloud
           end
         end
 
+        def keys(credentials, opts={})
+          client = new_client(credentials)
+          safely do
+            client.get('ssh_keys')['ssh_keys'].map do |k|
+              convert_key(k)
+            end
+          end
+        end
+
+        def key(credentials, opts={})
+          client = new_client(credentials)
+          safely do
+            convert_key(client.get("ssh_keys/#{opts[:id]}")["ssh_key"])
+          end
+        end
+
+        def destroy_key(credentials, opts={})
+          client = new_client(credentials)
+          original_key = key(credentials, opts)
+          safely do
+            client.get("ssh_keys/#{opts[:id]}/destroy")
+            original_key.state = 'deleted'
+            original_key
+          end
+        end
+
+        def create_key(credentials, opts={})
+          client = new_client(credentials)
+          convert_key(
+            client.get(
+              "ssh_keys/new",
+              :name => opts[:key_name],
+              :ssh_pub_key => opts[:public_key])['ssh_key']
+          )
+        end
+
         exceptions do
 
           on(/InternalServerError/) do
@@ -221,6 +258,16 @@ module Deltacloud
           return 'i386' if name.include? 'x32'
         end
 
+        def convert_key(k)
+          Key.new(
+            :id => k['id'],
+            :name => k['name'],
+            :credential_type => :key,
+            :pem_rsa_key => k['ssh_pub_key'],
+            :state => 'available'
+          )
+        end
+
         def convert_state(status)
           case status
             when 'active' then 'RUNNING'
diff --git a/server/lib/deltacloud/models/base_model.rb 
b/server/lib/deltacloud/models/base_model.rb
index 2553042..613bb1f 100644
--- a/server/lib/deltacloud/models/base_model.rb
+++ b/server/lib/deltacloud/models/base_model.rb
@@ -17,6 +17,8 @@
 
 class BaseModel
 
+  attr_accessor :name, :description
+
   def initialize(init=nil)
     if ( init )
       @id=init[:id]
diff --git a/server/lib/deltacloud/models/key.rb 
b/server/lib/deltacloud/models/key.rb
index 64492fb..6600a81 100644
--- a/server/lib/deltacloud/models/key.rb
+++ b/server/lib/deltacloud/models/key.rb
@@ -24,7 +24,7 @@ class Key < BaseModel
   attr_accessor :state
 
   def name
-    @name || @id
+    super || @id
   end
 
   def is_password?
diff --git a/server/views/keys/index.html.haml 
b/server/views/keys/index.html.haml
index 248aca7..43efd76 100644
--- a/server/views/keys/index.html.haml
+++ b/server/views/keys/index.html.haml
@@ -8,6 +8,7 @@
         %a{ :href => key_url(key.id), :'data-ajax' => 'false'}
           %img{ :class => 'ui-link-thumb', :src => '/images/key.png'}
           %h3=key.id
+          %p=key.name
           %p
             - if key.credential_type.eql?(:key)
               = key.fingerprint
diff --git a/server/views/keys/show.html.haml b/server/views/keys/show.html.haml
index 251efa4..2b2a11e 100644
--- a/server/views/keys/show.html.haml
+++ b/server/views/keys/show.html.haml
@@ -6,6 +6,9 @@
     %li{ :'data-role' => 'list-divider'} Identifier
     %li
       %p{ :'data-role' => 'fieldcontain'}=@key.id
+    %li{ :'data-role' => 'list-divider'} Name
+    %li
+      %p{ :'data-role' => 'fieldcontain'}=@key.name
     - if @key.is_password?
       %li{ :'data-role' => 'list-divider'} Username
       %li
@@ -14,13 +17,14 @@
       %li
         %p{ :'data-role' => 'fieldcontain'}=@key.password
     - else
-      %li{ :'data-role' => 'list-divider'} Fingerprint
-      %li
-        %p{ :'data-role' => 'fieldcontain'}=@key.fingerprint
+      - if @key.fingerprint
+        %li{ :'data-role' => 'list-divider'} Fingerprint
+        %li
+          %p{ :'data-role' => 'fieldcontain'}=@key.fingerprint
       %li{ :'data-role' => 'list-divider'} PEM key
       %li
         %p{ :'data-role' => 'fieldcontain'}
-          %pre=@key.pem_rsa_key
+          %pre{:style=> 'width:600px;overflow:auto;'}=@key.pem_rsa_key
     %li{ :'data-role' => 'list-divider'} Actions
     %li
       %div{ :'data-role' => 'controlgroup', :'data-type' => "horizontal" }
diff --git a/server/views/keys/show.xml.haml b/server/views/keys/show.xml.haml
index 2e98d0d..db0786b 100644
--- a/server/views/keys/show.xml.haml
+++ b/server/views/keys/show.xml.haml
@@ -6,8 +6,9 @@
     - if driver.respond_to?(:destroy_key)
       %link{ :rel => "destroy", :method => "delete", :href => 
destroy_key_url(@key.id)}
   - if @key.is_key?
-    %fingerprint<
-      =@key.fingerprint
+    - if @key.fingerprint
+      %fingerprint<
+        =@key.fingerprint
     - unless @key.pem_rsa_key.nil?
       %pem
         ~render_cdata(@key.pem_rsa_key)
-- 
1.8.1.2

Reply via email to