---
 .../lib/deltacloud/base_driver/authentication.rb   |   47 ++++++++++++++++++++
 server/lib/deltacloud/drivers/ec2/ec2_driver.rb    |   16 +-----
 .../lib/deltacloud/drivers/gogrid/gogrid_driver.rb |   18 +------
 .../drivers/rackspace/rackspace_driver.rb          |    1 +
 4 files changed, 54 insertions(+), 28 deletions(-)
 create mode 100644 server/lib/deltacloud/base_driver/authentication.rb

diff --git a/server/lib/deltacloud/base_driver/authentication.rb 
b/server/lib/deltacloud/base_driver/authentication.rb
new file mode 100644
index 0000000..1acc05c
--- /dev/null
+++ b/server/lib/deltacloud/base_driver/authentication.rb
@@ -0,0 +1,47 @@
+module Deltacloud
+  module Authentication
+
+    class Key
+      attr_accessor :keyname
+
+      def initialize(keyname)
+        @keyname = keyname
+      end
+
+      def has_key?
+        @keyname ? true : false
+      end
+
+      def to_s
+        return '<error>Instance do not provide a key name</error>' unless 
has_key?
+        ' <login type="key">'+
+        '   <keyname><![CDATA['+...@keyname+']]></keyname>'+
+        ' </login>'
+      end
+
+    end
+
+    class Password
+      attr_accessor :username
+      attr_accessor :password
+
+      def initialize(username, password)
+        @username, @password = username, password
+      end
+
+      def has_password?
+        (@username && @password) ? true : false
+      end
+
+      def to_s
+        return '<error>Instance do not provide username or password</error>' 
unless has_password?
+        ' <login type="password">'+
+        '   <username><![CDATA['+...@username+']]></username>'+
+        '   <password><![CDATA['+...@password+']]></password>'+
+        ' </login>'
+      end
+
+    end
+
+  end
+end
diff --git a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb 
b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
index 0f4e128..603b266 100644
--- a/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
+++ b/server/lib/deltacloud/drivers/ec2/ec2_driver.rb
@@ -17,25 +17,16 @@
 
 
 require 'deltacloud/base_driver'
+require 'deltacloud/base_driver/authentication'
 require 'AWS'
 
-class Instance
-  attr_accessor :keyname
-  attr_accessor :authn_error
-
-  def authn_feature_failed?
-    return true unless authn_error.nil?
-  end
-
-end
-
 module Deltacloud
   module Drivers
     module EC2
 class EC2Driver < Deltacloud::BaseDriver
 
   feature :instances, :user_data
-  feature :instances, :authentication_key
+  feature :instances, :authentication
 
   define_hardware_profile('m1.small') do
     cpu                1
@@ -297,10 +288,9 @@ class EC2Driver < Deltacloud::BaseDriver
       :private_addresses=>( ec2_instance['privateDnsName'] == '' ? [] : 
[ec2_instance['privateDnsName']] ),
       :instance_profile =>InstanceProfile.new(hwp_name),
       :actions=>instance_actions_for( state ),
-      :keyname => ec2_instance['keyName'],
+      :authentication => 
Deltacloud::Authentication::Key.new(ec2_instance['keyName']),
       :launch_time => ec2_instance['launchTime']
     } )
-    instance.authn_error = "Key not set for instance" unless 
ec2_instance['keyName']
     return instance
   end
 
diff --git a/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb 
b/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb
index ec56312..c2a9d87 100644
--- a/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb
+++ b/server/lib/deltacloud/drivers/gogrid/gogrid_driver.rb
@@ -16,25 +16,16 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  
USA
 
 require 'deltacloud/base_driver'
+require 'deltacloud/base_driver/authentication'
 require 'deltacloud/drivers/gogrid/gogrid_client'
 
-class Instance
-  attr_accessor :username
-  attr_accessor :password
-  attr_accessor :authn_error
-
-  def authn_feature_failed?
-    return true unless authn_error.nil?
-  end
-end
-
 module Deltacloud
   module Drivers
     module Gogrid
 
 class GogridDriver < Deltacloud::BaseDriver
 
-  feature :instances, :authentication_password
+  feature :instances, :authentication
 
   define_hardware_profile 'server' do
     cpu            2
@@ -105,7 +96,6 @@ class GogridDriver < Deltacloud::BaseDriver
           inst = convert_instance(instance, credentials.user)
         else
           inst = convert_instance(instance, credentials.user)
-          inst.authn_error = "Unable to fetch password"
         end
         return inst
       else
@@ -139,7 +129,6 @@ class GogridDriver < Deltacloud::BaseDriver
           inst = convert_instance(instance, credentials.user)
         else
           inst = convert_instance(instance, credentials.user)
-          inst.authn_error = "Unable to fetch password"
         end
         instances = [inst]
       rescue Exception => e
@@ -282,8 +271,7 @@ class GogridDriver < Deltacloud::BaseDriver
       :actions => 
instance_actions_for(convert_server_state(instance['state']['name'], 
instance['id'])),
       :public_addresses => [ instance['ip']['ip'] ],
       :private_addresses => [],
-      :username => instance['username'],
-      :password => instance['password']
+      :authentication => 
Deltacloud::Authentication::Password.new(instance['username'], 
instance['password'])
     )
   end
 
diff --git a/server/lib/deltacloud/drivers/rackspace/rackspace_driver.rb 
b/server/lib/deltacloud/drivers/rackspace/rackspace_driver.rb
index 3ad5452..4361ff8 100644
--- a/server/lib/deltacloud/drivers/rackspace/rackspace_driver.rb
+++ b/server/lib/deltacloud/drivers/rackspace/rackspace_driver.rb
@@ -119,6 +119,7 @@ class RackspaceDriver < Deltacloud::BaseDriver
     inst.actions = instance_actions_for(inst.state)
     inst.image_id = srv["imageId"].to_s
     inst.instance_profile = InstanceProfile.new(srv["flavorId"].to_s)
+    inst.authentication = Deltacloud::Authentication::Password.new('root', 
srv['adminPass'])
     if srv["addresses"]
       inst.public_addresses  = srv["addresses"]["public"]
       inst.private_addresses = srv["addresses"]["private"]
-- 
1.7.1

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to