Return-Path: X-Original-To: apmail-deltacloud-commits-archive@www.apache.org Delivered-To: apmail-deltacloud-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 286EFC7C5 for ; Fri, 25 May 2012 07:34:11 +0000 (UTC) Received: (qmail 79202 invoked by uid 500); 25 May 2012 07:34:11 -0000 Delivered-To: apmail-deltacloud-commits-archive@deltacloud.apache.org Received: (qmail 79146 invoked by uid 500); 25 May 2012 07:34:10 -0000 Mailing-List: contact commits-help@deltacloud.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@deltacloud.apache.org Delivered-To: mailing list commits@deltacloud.apache.org Received: (qmail 79028 invoked by uid 99); 25 May 2012 07:34:06 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 25 May 2012 07:34:06 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 659B517D8F; Fri, 25 May 2012 07:34:06 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: mfojtik@apache.org To: commits@deltacloud.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [1/4] git commit: EC2 Frontend: Replaced Nokogiri with HAML views, added more actions Message-Id: <20120525073406.659B517D8F@tyr.zones.apache.org> Date: Fri, 25 May 2012 07:34:06 +0000 (UTC) Updated Branches: refs/heads/master e8c5efe1a -> c175084c9 EC2 Frontend: Replaced Nokogiri with HAML views, added more actions Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/888b7591 Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/888b7591 Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/888b7591 Branch: refs/heads/master Commit: 888b759119843200e91888296a259128ee63b390 Parents: 3baf29c Author: Michal Fojtik Authored: Tue May 15 14:49:30 2012 +0200 Committer: Michal fojtik Committed: Fri May 25 09:33:50 2012 +0200 ---------------------------------------------------------------------- server/lib/ec2/helpers/converter.rb | 140 --------------- server/lib/ec2/helpers/result.rb | 31 ++++ server/lib/ec2/query_parser.rb | 51 ++++-- server/lib/ec2/server.rb | 4 +- server/lib/ec2/views/create_key_pair.haml | 3 + server/lib/ec2/views/delete_key_pair.haml | 1 + .../lib/ec2/views/describe_availability_zones.haml | 6 + server/lib/ec2/views/describe_images.haml | 10 + server/lib/ec2/views/describe_instance_set.haml | 20 ++ server/lib/ec2/views/describe_instances.haml | 9 + server/lib/ec2/views/describe_key_pairs.haml | 5 + server/lib/ec2/views/instance_action.haml | 9 + server/lib/ec2/views/reboot_instances.haml | 1 + server/lib/ec2/views/run_instances.haml | 7 + server/lib/ec2/views/start_instances.haml | 1 + server/lib/ec2/views/stop_instances.haml | 1 + server/lib/ec2/views/terminate_instances.haml | 9 + 17 files changed, 151 insertions(+), 157 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/helpers/converter.rb ---------------------------------------------------------------------- diff --git a/server/lib/ec2/helpers/converter.rb b/server/lib/ec2/helpers/converter.rb deleted file mode 100644 index 8a70fe1..0000000 --- a/server/lib/ec2/helpers/converter.rb +++ /dev/null @@ -1,140 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. The -# ASF licenses this file to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance with the -# License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -module Deltacloud::EC2 - - class Converter - - def self.convert(builder, action, result) - klass_name = ActionHandler::MAPPINGS[action][:method].to_s.camelize - klass = Converter.const_get(klass_name) - klass.new(builder, result).to_xml - end - - class Base - - attr_reader :xml - attr_reader :obj - - def initialize(builder, object) - @xml = builder - @obj = object - end - - end - - class Realms < Base - - def to_xml - xml.availabilityZoneInfo { - obj.each do |item| - xml.item { - xml.zoneName item.id - xml.zoneState item.state - xml.regionName item.name - } - end - } - end - - end - - class Images < Base - - def to_xml - xml.imagesSet { - obj.each do |item| - xml.item { - xml.imageId item.id - xml.imageState item.state.downcase - xml.imageOwnerId item.owner_id - xml.architecture item.architecture - xml.imageType 'machine' - xml.name item.name - xml.description item.description - } - end - } - end - - end - - class CreateInstance < Base - - def to_xml - xml.reservationId 'r-11111111' - xml.ownerId @obj.owner_id - xml.groupSet { - xml.item { - xml.groupId 'sg-11111111' - xml.groupName 'default' - } - } - Instances.new(@xml, [@obj]).instance_set - end - - end - - class Instances < Base - - def instance_set - xml.instancesSet { - obj.each do |item| - xml.item { - xml.instanceId item.id - xml.imageId item.image_id - xml.instanceType item.instance_profile.name - xml.launchTime item.launch_time - xml.ipAddress item.public_addresses.first.address - xml.privateIpAddress item.public_addresses.first.address - xml.dnsName item.public_addresses.first.address - xml.privateDnsName item.private_addresses.first.address - xml.architecture item.instance_profile.architecture - xml.keyName item.keyname - xml.instanceState { - xml.code '16' - xml.name item.state.downcase - } - xml.placement { - xml.availabilityZone item.realm_id - xml.groupName - xml.tenancy 'default' - } - } - end - } - end - - def to_xml - xml.reservationSet { - xml.item { - xml.reservationId 'r-11111111' - xml.ownerId 'deltacloud' - xml.groupSet { - xml.item { - xml.groupId 'sg-11111111' - xml.groupName 'default' - } - } - self.instance_set - } - } - end - - end - - end - -end http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/helpers/result.rb ---------------------------------------------------------------------- diff --git a/server/lib/ec2/helpers/result.rb b/server/lib/ec2/helpers/result.rb new file mode 100644 index 0000000..0fea9c2 --- /dev/null +++ b/server/lib/ec2/helpers/result.rb @@ -0,0 +1,31 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +module Deltacloud::EC2 + module ResultHelper + + def instance_state_code(state) + case state + when 'running' then '16' + when 'pending' then '0' + when 'stopping' then '64' + when 'stopped' then '80' + when 'shutting-down' then '32' + else '-1' + end + end + + end +end http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/query_parser.rb ---------------------------------------------------------------------- diff --git a/server/lib/ec2/query_parser.rb b/server/lib/ec2/query_parser.rb index 7eebc9a..8d2abc9 100644 --- a/server/lib/ec2/query_parser.rb +++ b/server/lib/ec2/query_parser.rb @@ -21,7 +21,14 @@ module Deltacloud::EC2 :describe_availability_zones => { :method => :realms, :params => { 'ZoneName.1' => :id } }, :describe_images => { :method => :images, :params => { 'ImageId.1' => :id }}, :describe_instances => { :method => :instances, :params => {} }, - :run_instances => { :method => :create_instance, :params => { 'ImageId' => :image_id, 'InstanceType' => :hwp_id, 'Placement.AvailabilityZone' => :realm_id }} + :describe_key_pairs => { :method => :keys, :params => {} }, + :create_key_pair => { :method => :create_key, :params => { 'KeyName' => :key_name }}, + :delete_key_pair => { :method => :destroy_key, :params => { 'KeyName' => :id }}, + :run_instances => { :method => :create_instance, :params => { 'ImageId' => :image_id, 'InstanceType' => :hwp_id, 'Placement.AvailabilityZone' => :realm_id }}, + :stop_instances => { :method => :stop_instance, :params => { 'InstanceId.1' => :id }}, + :start_instances => { :method => :start_instance, :params => { 'InstanceId.1' => :id }}, + :reboot_instances => { :method => :reboot_instance, :params => { 'InstanceId.1' => :id }}, + :terminate_instances => { :method => :destroy_instance, :params => { 'InstanceId.1' => :id }}, } attr_reader :action @@ -44,35 +51,49 @@ module Deltacloud::EC2 def perform!(credentials, driver) @result = case deltacloud_method when :create_instance then driver.send(deltacloud_method, credentials, deltacloud_method_params.delete(:image_id), deltacloud_method_params) + when :stop_instance then driver.send(deltacloud_method, credentials, deltacloud_method_params.delete(:id)) + when :start_instance then driver.send(deltacloud_method, credentials, deltacloud_method_params.delete(:id)) + when :destroy_instance then driver.send(deltacloud_method, credentials, deltacloud_method_params.delete(:id)) + when :reboot_instance then driver.send(deltacloud_method, credentials, deltacloud_method_params.delete(:id)) else driver.send(deltacloud_method, credentials, deltacloud_method_params) end end - def to_xml - ResultParser.parse(action, @result).to_xml + def to_xml(context) + ResultParser.parse(action, @result, context) end end class ResultParser - def self.parse(parser, result) - Nokogiri::XML::Builder.new do |xml| - xml.send(:"#{parser.action.to_s.camelize}Response", :xmlns => 'http://ec2.amazonaws.com/doc/2012-04-01/') { - xml.requestId parser.request_id - new(xml, parser, result).build_xml - } - end + include ResultHelper + + attr_reader :query + attr_reader :object + attr_reader :context + + def self.parse(query, result, context) + parser = new(query, result, context) + layout = "%#{query.action.to_s.camelize}Response{:xmlns => 'http://ec2.amazonaws.com/doc/2012-04-01/'}\n"+ + "\t%requestId #{query.request_id}\n" + + "\t=render(:#{query.action}, object)\n" + Haml::Engine.new(layout, :filename => 'layout').render(parser) end - def initialize(xml, parser, result) - @builder = xml - @parser = parser - @result = result + def initialize(query, object, context) + @context = context + @query = query + @object = object end def build_xml - Converter.convert(@builder, @parser.action, @result) + Converter.convert(query.action, object) + end + + def render(template, obj) + template_filename = File.join(File.dirname(__FILE__), 'views', '%s.haml' % template.to_s) + Haml::Engine.new(File.read(template_filename), :filename => template_filename).render(self, :object => obj) end end http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/server.rb ---------------------------------------------------------------------- diff --git a/server/lib/ec2/server.rb b/server/lib/ec2/server.rb index 29fc545..d229c94 100644 --- a/server/lib/ec2/server.rb +++ b/server/lib/ec2/server.rb @@ -14,8 +14,8 @@ # under the License. require 'rubygems' -require 'nokogiri' require 'sinatra/base' +require 'haml' require_relative '../sinatra' require_relative './helpers' @@ -53,7 +53,7 @@ module Deltacloud::EC2 content_type :xml ec2_action = QueryParser.parse(params, request_id) ec2_action.perform!(credentials, driver) - ec2_action.to_xml + ec2_action.to_xml(self) end end http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/create_key_pair.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/create_key_pair.haml b/server/lib/ec2/views/create_key_pair.haml new file mode 100644 index 0000000..ed00492 --- /dev/null +++ b/server/lib/ec2/views/create_key_pair.haml @@ -0,0 +1,3 @@ +%keyName=object.name +%keyFingerprint=object.fingerprint +%keyMaterial=object.pem_rsa_key http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/delete_key_pair.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/delete_key_pair.haml b/server/lib/ec2/views/delete_key_pair.haml new file mode 100644 index 0000000..d809ea8 --- /dev/null +++ b/server/lib/ec2/views/delete_key_pair.haml @@ -0,0 +1 @@ +%return true http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/describe_availability_zones.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/describe_availability_zones.haml b/server/lib/ec2/views/describe_availability_zones.haml new file mode 100644 index 0000000..1d96617 --- /dev/null +++ b/server/lib/ec2/views/describe_availability_zones.haml @@ -0,0 +1,6 @@ +%availabilityZoneInfo + - object.each do |item| + %item + %zoneName=item.id + %zoneState=item.state + %regionName=item.name http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/describe_images.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/describe_images.haml b/server/lib/ec2/views/describe_images.haml new file mode 100644 index 0000000..a49a5ee --- /dev/null +++ b/server/lib/ec2/views/describe_images.haml @@ -0,0 +1,10 @@ +%imagesSet + - object.each do |item| + %item + %imageId=item.id + %imageState=item.state.downcase + %imageOwnerId=item.owner_id + %architecture item.architecture + %imageType machine + %name=item.name + %description=item.description http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/describe_instance_set.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/describe_instance_set.haml b/server/lib/ec2/views/describe_instance_set.haml new file mode 100644 index 0000000..b8c7c1c --- /dev/null +++ b/server/lib/ec2/views/describe_instance_set.haml @@ -0,0 +1,20 @@ +%instanceSet + - object.each do |item| + %item + %instanceId=item.id + %imageId=item.image_id + %instanceType=item.instance_profile.name + %launchTime=item.launch_time + %ipAddress=item.public_addresses.first.address + %privateIpAddress=item.public_addresses.first.address + %dnsName=item.public_addresses.first.address + %privateDnsName=item.private_addresses.first.address + %architecture=item.instance_profile.architecture + %keyName=item.keyname + %instanceState + %code=instance_state_code(item.state.downcase) + %name=item.state.downcase + %placement + %availabilityZone=item.realm_id + %groupName + %tenancy default http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/describe_instances.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/describe_instances.haml b/server/lib/ec2/views/describe_instances.haml new file mode 100644 index 0000000..75bcf7c --- /dev/null +++ b/server/lib/ec2/views/describe_instances.haml @@ -0,0 +1,9 @@ +%reservationSet + %item + %reservationId r-11111111 + %ownerId deltacloud + %groupSet + %item + %groupId sg-11111111 + %groupName default + =render(:describe_instance_set, object) http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/describe_key_pairs.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/describe_key_pairs.haml b/server/lib/ec2/views/describe_key_pairs.haml new file mode 100644 index 0000000..9b97bca --- /dev/null +++ b/server/lib/ec2/views/describe_key_pairs.haml @@ -0,0 +1,5 @@ +%keySet + - object.each do |item| + %item + %keyName=item.name + %keyFingerprint=item.fingerprint http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/instance_action.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/instance_action.haml b/server/lib/ec2/views/instance_action.haml new file mode 100644 index 0000000..7cafefa --- /dev/null +++ b/server/lib/ec2/views/instance_action.haml @@ -0,0 +1,9 @@ +%instancesSet + %item + %instanceId=object.id + %currentState + %code=instance_state_code(object.state.downcase) + %name=object.state.downcase + %previousState + %code -1 + %name unknown http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/reboot_instances.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/reboot_instances.haml b/server/lib/ec2/views/reboot_instances.haml new file mode 100644 index 0000000..cc966ed --- /dev/null +++ b/server/lib/ec2/views/reboot_instances.haml @@ -0,0 +1 @@ +=render :instance_action, object http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/run_instances.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/run_instances.haml b/server/lib/ec2/views/run_instances.haml new file mode 100644 index 0000000..ef306a7 --- /dev/null +++ b/server/lib/ec2/views/run_instances.haml @@ -0,0 +1,7 @@ +%reservationId r-11111111 +%ownerId deltacloud +%groupSet + %item + %groupId sg-11111111 + %groupName default +=render :describe_instance_set, [object] http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/start_instances.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/start_instances.haml b/server/lib/ec2/views/start_instances.haml new file mode 100644 index 0000000..cc966ed --- /dev/null +++ b/server/lib/ec2/views/start_instances.haml @@ -0,0 +1 @@ +=render :instance_action, object http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/stop_instances.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/stop_instances.haml b/server/lib/ec2/views/stop_instances.haml new file mode 100644 index 0000000..cc966ed --- /dev/null +++ b/server/lib/ec2/views/stop_instances.haml @@ -0,0 +1 @@ +=render :instance_action, object http://git-wip-us.apache.org/repos/asf/deltacloud/blob/888b7591/server/lib/ec2/views/terminate_instances.haml ---------------------------------------------------------------------- diff --git a/server/lib/ec2/views/terminate_instances.haml b/server/lib/ec2/views/terminate_instances.haml new file mode 100644 index 0000000..ee7cba1 --- /dev/null +++ b/server/lib/ec2/views/terminate_instances.haml @@ -0,0 +1,9 @@ +%instancesSet + %item + %instanceId=context.params['InstanceId.1'] + %currentState + %code=32 + %name shutting-down + %previousState + %code -1 + %name unknown