You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by lu...@apache.org on 2011/08/12 00:41:42 UTC

svn commit: r1156852 - in /incubator/deltacloud/trunk/server: lib/sinatra/rabbit.rb server.rb

Author: lutter
Date: Thu Aug 11 22:41:42 2011
New Revision: 1156852

URL: http://svn.apache.org/viewvc?rev=1156852&view=rev
Log:
Rabbit: Added :new operation to collection

Signed-off-by: Michal fojtik <mf...@redhat.com>

Modified:
    incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb
    incubator/deltacloud/trunk/server/server.rb

Modified: incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb?rev=1156852&r1=1156851&r2=1156852&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb (original)
+++ incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb Thu Aug 11 22:41:42 2011
@@ -38,12 +38,14 @@ module Sinatra
     end
 
     class Operation
-      attr_reader :name, :method, :collection
+      attr_reader :name, :method, :collection, :member
 
       include ::Deltacloud::BackendCapability
       include ::Deltacloud::Validation
+      include ::ApplicationHelper
 
       STANDARD = {
+        :new => { :method => :get, :member => false, :form => true },
         :index => { :method => :get, :member => false },
         :show =>  { :method => :get, :member => true },
         :create => { :method => :post, :member => false },
@@ -72,6 +74,10 @@ module Sinatra
         STANDARD.keys.include?(name)
       end
 
+      def form?
+        STANDARD[name] and STANDARD[name][:form]
+      end
+
       def description(text="")
         return @description if text.blank?
         @description = text
@@ -122,7 +128,11 @@ module Sinatra
             "#{@collection.name}/:id/#{name}"
           end
         else
-          "#{@collection.name}"
+          if form?
+            "#{@collection.name}/#{name}"
+          else
+            "#{@collection.name}"
+          end
         end
       end
 
@@ -260,13 +270,13 @@ module Sinatra
       end
 
       def generate
-        operations.values.each { |op| op.generate }
+        operations.values.reject { |op| op.member }.each { |o| o.generate }
+        operations.values.select { |op| op.member }.each { |o| o.generate }
         app = ::Sinatra::Application
         collname = name # Work around Ruby's weird scoping/capture
         app.send(:define_method, "#{name.to_s.singularize}_url") do |id|
             api_url_for "#{collname}/#{id}", :full
         end
-
         if index_op = operations[:index]
           app.send(:define_method, "#{name}_url") do
             api_url_for index_op.path.gsub(/\/\?$/,''), :full

Modified: incubator/deltacloud/trunk/server/server.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/server.rb?rev=1156852&r1=1156851&r2=1156852&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/server.rb (original)
+++ incubator/deltacloud/trunk/server/server.rb Thu Aug 11 22:41:42 2011
@@ -161,19 +161,23 @@ END
 
 end
 
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/images/new" do
-  @instance = Instance.new( :id => params[:instance_id] )
-  respond_to do |format|
-    format.html { haml :"images/new" }
-  end
-end
-
 collection :images do
   description <<END
   An image is a platonic form of a machine. Images are not directly executable,
   but are a template for creating actual instances of machines.
 END
 
+  operation :new do
+    description "Form to create a new image resource"
+    param :instance_id, :string,  "An instance from which the new image will be created from"
+    control do
+      @instance = Instance.new( :id => params[:instance_id] )
+      respond_to do |format|
+        format.html { haml :"images/new" }
+      end
+    end
+  end
+
   operation :index do
     description <<END
     The images collection will return a set of all images
@@ -271,21 +275,6 @@ collection :instance_states do
   end
 end
 
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/instances/new" do
-  @instance = Instance.new( { :id=>params[:id], :image_id=>params[:image_id] } )
-  @image   = driver.image( credentials, :id => params[:image_id] )
-  @hardware_profiles = driver.hardware_profiles(credentials, :architecture => @image.architecture )
-  @realms = driver.realms(credentials)
-  @keys = driver.keys(credentials) if driver_has_feature?(:authentication_key)
-  @firewalls = driver.firewalls(credentials) if driver_has_feature?(:firewalls)
-  if driver_has_feature?(:register_to_load_balancer)
-    @load_balancers = driver.load_balancers(credentials)
-  end
-  respond_to do |format|
-    format.html { haml :"instances/new" }
-  end
-end
-
 get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/instances/:id/run" do
   @instance = driver.instance(credentials, :id => params[:id])
   respond_to do |format|
@@ -293,18 +282,20 @@ get "#{Sinatra::UrlForHelper::DEFAULT_UR
   end
 end
 
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/load_balancers/new" do
-  @realms = driver.realms(credentials)
-  @instances = driver.instances(credentials) if driver_has_feature?(:register_instance, :load_balancers)
-  respond_to do |format|
-    format.html { haml :"load_balancers/new" }
-  end
-end
-
-
 collection :load_balancers do
   description "Load balancers"
 
+  operation :new do
+    description "Form to create a new load balancer"
+    control do
+      @realms = driver.realms(credentials)
+      @instances = driver.instances(credentials) if driver_has_feature?(:register_instance, :load_balancers)
+      respond_to do |format|
+        format.html { haml :"load_balancers/new" }
+      end
+    end
+  end
+
   operation :index do
     description "List of all active load balancers"
     control do
@@ -390,6 +381,32 @@ collection :instances do
   The images collection may be obtained by following the link from the primary entry-point.
 END
 
+  operation :new do
+    description "Form for creating a new instance resource"
+    param :image_id,  :string,  "Image from which will be the new instance created from"
+    param :realm_id,  :string, :optional
+    if driver_has_feature? :authentication_key
+      param :authentication_key, :string, :optional
+    end
+    if driver_has_feature? :firewalls
+      param :firewalls, :string, :optional
+    end
+    control do
+      @instance = Instance.new( { :id=>params[:id], :image_id=>params[:image_id] } )
+      @image   = Image.new( :id => params[:image_id] )
+      @hardware_profiles = driver.hardware_profiles(credentials, :architecture => @image.architecture )
+      @realms = Realm.new(:id => params[:realm_id]) if params[:realm_id]
+      @realms ||= []
+      @keys = driver.keys(credentials) if driver_has_feature?(:authentication_key)
+      @firewalls = driver.firewalls(credentials) if driver_has_feature?(:firewalls)
+      respond_to do |format|
+        format.html do
+          haml :'instances/new'
+        end
+      end
+    end
+  end
+
   operation :index do
     description "List all instances."
     with_capability :instances
@@ -518,15 +535,18 @@ END
 
 end
 
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/storage_snapshots/new" do
-  respond_to do |format|
-    format.html { haml :"storage_snapshots/new" }
-  end
-end
-
 collection :storage_snapshots do
   description "Storage snapshots description here"
 
+  operation :new do
+    description "A form to create a new storage snapshot"
+    control do
+      respond_to do |format|
+        format.html { haml :"storage_snapshots/new" }
+      end
+    end
+  end
+
   operation :index do
     description "List of storage snapshots."
     with_capability :storage_snapshots
@@ -569,22 +589,18 @@ collection :storage_snapshots do
   end
 end
 
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/storage_volumes/new" do
-  respond_to do |format|
-    format.html { haml :"storage_volumes/new" }
-  end
-end
-
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/storage_volumes/attach" do
-  respond_to do |format|
-    @instances = driver.instances(credentials)
-    format.html { haml :"storage_volumes/attach" }
-  end
-end
-
 collection :storage_volumes do
   description "Storage volumes description here"
 
+  operation :new do
+    description "A form to create a new storage volume"
+    control do
+      respond_to do |format|
+        format.html { haml :"storage_volumes/new" }
+      end
+    end
+  end
+
   operation :index do
     description "List of storage volumes."
     with_capability :storage_volumes
@@ -667,15 +683,18 @@ collection :storage_volumes do
 
 end
 
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/keys/new" do
-  respond_to do |format|
-    format.html { haml :"keys/new" }
-  end
-end
-
 collection :keys do
   description "Instance authentication credentials."
 
+  operation :new do
+    description "A form to create a new key resource"
+    control do
+      respond_to do |format|
+        format.html { haml :"keys/new" }
+      end
+    end
+  end
+
   operation :index do
     description "List all available credentials which could be used for instance authentication."
     with_capability :keys
@@ -724,14 +743,6 @@ collection :keys do
 
 end
 
-#get html form for creating a new blob
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/buckets/:bucket/new_blob" do
-  @bucket_id = params[:bucket]
-  respond_to do |format|
-    format.html {haml :"blobs/new"}
-  end
-end
-
 #create a new blob using PUT - streams through deltacloud
 put "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/buckets/:bucket/:blob" do
   if(env["BLOB_SUCCESS"]) #ie got a 200ok after putting blob
@@ -864,16 +875,28 @@ get "#{Sinatra::UrlForHelper::DEFAULT_UR
   end
 end
 
-#Get html form for creating a new bucket
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/buckets/new" do
-  respond_to do |format|
-    format.html { haml :"buckets/new" }
-  end
-end
-
 collection :buckets do
   description "Cloud Storage buckets - aka buckets|directories|folders"
 
+  operation :new do
+    description "A form to create a new bucket resource"
+    control do
+      respond_to do |format|
+        format.html { haml :"buckets/new" }
+      end
+    end
+  end
+
+  operation :new_bucket, :form => true, :method => :get, :member => true do
+    param :bucket,  :string
+    control do
+      @bucket_id = params[:bucket]
+      respond_to do |format|
+        format.html {haml :"blobs/new"}
+      end
+    end
+  end
+
   operation :index do
     description "List buckets associated with this account"
     with_capability :buckets
@@ -1015,21 +1038,6 @@ collection :addresses do
 
 end
 
-#html for creating a new firewall
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/firewalls/new" do
-  respond_to do |format|
-    format.html { haml :"firewalls/new" }
-  end
-end
-
-#html for creating a new firewall rule
-get "#{Sinatra::UrlForHelper::DEFAULT_URI_PREFIX}/firewalls/:firewall/new_rule" do
-  @firewall_name = params[:firewall]
-  respond_to do |format|
-    format.html {haml :"firewalls/new_rule" }
-  end
-end
-
 #delete a firewall rule
 delete '/api/firewalls/:firewall/:rule' do
   opts = {}
@@ -1047,6 +1055,27 @@ end
 #FIREWALLS
 collection :firewalls do
   description "Allow user to define firewall rules for an instance (ec2 security groups) eg expose ssh access [port 22, tcp]."
+
+  operation :new do
+    description "A form to create a new firewall resource"
+    control do
+      respond_to do |format|
+        format.html { haml :"firewalls/new" }
+      end
+    end
+  end
+
+  operation :new_rule, :form => true, :member => true, :method => :get do
+    description "A form to create a new firewall rule"
+    param :firewall,  :string,  :optional
+    control do
+      @firewall_name = params[:firewall]
+      respond_to do |format|
+        format.html {haml :"firewalls/new_rule" }
+      end
+    end
+  end
+
   operation :index do
     description 'List all firewalls'
     with_capability :firewalls
@@ -1092,7 +1121,7 @@ collection :firewalls do
     end
   end
 
-#create a new firewall rule - POST /api/firewalls/:firewall/rules
+  #create a new firewall rule - POST /api/firewalls/:firewall/rules
   operation :rules, :method => :post, :member => true do
     description 'Create a new firewall rule for the specified firewall'
     param :id,  :required, :string, [],  "Name of firewall in which to apply this rule"