deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lut...@redhat.com
Subject [PATCH 4/4] rackspace: support feature user_files for instances
Date Sat, 19 Mar 2011 00:03:14 GMT
From: David Lutterkort <lutter@redhat.com>

---
 .../drivers/rackspace/rackspace_driver.rb          |   32 ++++++++++++++++++--
 server/views/instances/new.html.haml               |   16 ++++++++++
 2 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/server/lib/deltacloud/drivers/rackspace/rackspace_driver.rb b/server/lib/deltacloud/drivers/rackspace/rackspace_driver.rb
index a4272e1..4363580 100644
--- a/server/lib/deltacloud/drivers/rackspace/rackspace_driver.rb
+++ b/server/lib/deltacloud/drivers/rackspace/rackspace_driver.rb
@@ -19,6 +19,7 @@
 require 'deltacloud/base_driver'
 require 'cloudfiles'
 require 'cloudservers'
+require 'base64'
 
 module Deltacloud
   module Drivers
@@ -28,6 +29,7 @@ class RackspaceDriver < Deltacloud::BaseDriver
 
   feature :instances, :user_name
   feature :instances, :authentication_password
+  feature :instances, :user_files
 
   def supported_collections
     DEFAULT_COLLECTIONS + [ :buckets ] - [ :storage_snapshots, :storage_volumes ]
@@ -82,10 +84,12 @@ class RackspaceDriver < Deltacloud::BaseDriver
   def create_instance(credentials, image_id, opts)
     rs = new_client( credentials )
     result = nil
+    params = extract_personality(opts)
+    params[:name] = opts[:name] || Time.now.to_s
+    params[:imageId] = image_id.to_i
+    params[:flavorId] = (opts[:hwp_id] && opts[:hwp_id].length>0) ? opts[:hwp_id].to_i
: 1
     safely do
-      server = rs.create_server(:name => opts[:name] || Time.now.to_s, 
-                       :imageId => image_id.to_i, 
-                       :flavorId => (opts[:hwp_id] && opts[:hwp_id].length>0)
? opts[:hwp_id].to_i : 1)
+      server = rs.create_server(params)
       result = convert_instance_after_create(server, credentials.user, server.adminPass)
     end
     result
@@ -394,6 +398,28 @@ private
     end
   end
 
+  private
+
+  def extract_personality(opts)
+    # This relies on an undocumented feature of the cloudservers gem:
+    # create_server allows passing in strings for the file contents
+    # directly if :personality maps to an array of hashes
+    ary = opts.inject([]) do |a, e|
+      k, v = e
+      if k.to_s =~ /^path([0-9]+)/
+        a << {
+          :path => v,
+          :contents => Base64.decode64(opts[:"content#{$1}"])
+        }
+      end
+      a
+    end
+    if ary.empty?
+      {}
+    else
+      { :personality => ary }
+    end
+  end
 end
 
     end
diff --git a/server/views/instances/new.html.haml b/server/views/instances/new.html.haml
index 5d075a6..647bf63 100644
--- a/server/views/instances/new.html.haml
+++ b/server/views/instances/new.html.haml
@@ -73,4 +73,20 @@
           %br/
           %span.radio-group-details
             = "#{realm.name}, #{realm.limit}"
+  - if driver_has_feature?(:user_files, :instances)
+    %h2 User-supplied files
+    %table
+      %thead
+        %tr
+          %th
+          %th Path
+          %th Content (must be base64 encoded)
+      %tbody
+        - 1.upto(5) do |i|
+          %tr
+            %td #{i.ordinalize} File:
+            %td
+              %input{ :name => "path#{i}", :size => 20 }
+            %td
+              %input{ :name => "content#{i}", :size => 50 }
   %input{ :type => :submit, :name => "commit", :value => "create" }/
-- 
1.7.4


Mime
View raw message