From e9ee8599d1a8674f570b1dd0fcaa82b25e24126f Mon Sep 17 00:00:00 2001 From: Daniel Molina Date: Wed, 30 Mar 2011 16:13:33 +0200 Subject: [PATCH] Feature #523: Update EC2 Server to use the new Image Repository drivers --- src/cloud/common/CloudServer.rb | 35 --------------------- src/cloud/ec2/lib/EC2QueryServer.rb | 11 +++++-- src/cloud/ec2/lib/ImageEC2.rb | 15 ++++++++- src/cloud/ec2/lib/views/describe_images.erb | 28 +++++++++-------- 4 files changed, 37 insertions(+), 52 deletions(-) diff --git a/src/cloud/common/CloudServer.rb b/src/cloud/common/CloudServer.rb index 0955c2e84e..e05757ee07 100755 --- a/src/cloud/common/CloudServer.rb +++ b/src/cloud/common/CloudServer.rb @@ -62,8 +62,6 @@ class CloudServer @one_client = Client.new(nil,@config[:one_xmlrpc]) @user_pool = UserPool.new(@one_client) - - @img_repo = OpenNebula::ImageRepository.new end # @@ -103,39 +101,6 @@ class CloudServer return @user_pool["USER[NAME=\"#{name}\"]/PASSWORD"] end - ########################################################################### - # Repository Methods - ########################################################################### - - # Adds a new image to the repository and deletes the temp_file - # uid:: _Integer_ owner of the image - # path:: _String_ path of the tmp file - # metadata:: Additional metadata for the file - # [return] _Image_ Newly created image object - def add_image(image, file=nil) - template = image.to_one_template - - if file - if file[:tempfile] - file_path = file[:tempfile].path - template << "\nPATH = #{file_path}" - else - error_msg = "Image not present, aborting." - error = OpenNebula::Error.new(error_msg) - return error - end - end - - rc = @img_repo.create(image, template) - - file[:tempfile].unlink if file - - if OpenNebula.is_error?(rc) - return rc - end - - return nil - end # Finds out if a port is available on ip # ip:: _String_ IP address where the port to check is diff --git a/src/cloud/ec2/lib/EC2QueryServer.rb b/src/cloud/ec2/lib/EC2QueryServer.rb index e1f729870e..0de20daac5 100644 --- a/src/cloud/ec2/lib/EC2QueryServer.rb +++ b/src/cloud/ec2/lib/EC2QueryServer.rb @@ -111,11 +111,16 @@ class EC2QueryServer < CloudServer ########################################################################### def upload_image(params, one_client) - image = ImageEC2.new(Image.build_xml, one_client) + image = ImageEC2.new(Image.build_xml, one_client, params['file']) - rc = add_image(image, params['file']) + template = image.to_one_template + if OpenNebula.is_error?(template) + return OpenNebula::Error.new('Unsupported'), 400 + end + + rc = image.allocate(template) if OpenNebula.is_error?(rc) - return OpenNebula::Error.new('Unsupported'),400 + return OpenNebula::Error.new('Unsupported'), 400 end erb_version = params['Version'] diff --git a/src/cloud/ec2/lib/ImageEC2.rb b/src/cloud/ec2/lib/ImageEC2.rb index b1745330eb..e34da8127d 100644 --- a/src/cloud/ec2/lib/ImageEC2.rb +++ b/src/cloud/ec2/lib/ImageEC2.rb @@ -24,8 +24,21 @@ class ImageEC2 < Image ONE_IMAGE = %q{ NAME = "ec2-<%= uuid %>" TYPE = OS + <% if @image_file != nil %> + PATH = "<%= @image_file %>" + <% end %> }.gsub(/^ /, '') - + + def initialize(xml, client, file=nil) + super(xml, client) + @image_info = nil + @image_file = file + + if file && file[:tempfile] + @image_file = file[:tempfile].path + end + end + def to_one_template() uuid = UUID.generate diff --git a/src/cloud/ec2/lib/views/describe_images.erb b/src/cloud/ec2/lib/views/describe_images.erb index d4a787e005..5ef277ad1a 100644 --- a/src/cloud/ec2/lib/views/describe_images.erb +++ b/src/cloud/ec2/lib/views/describe_images.erb @@ -1,25 +1,27 @@ - + <% impool.each do |im| %> <% im.info %> - + ami-<%= sprintf('%08i', im.id) %> <%= im['SOURCE'].split('/').last %> - <% if im['STATE'] == '3' %> - deregistered + <% if im['STATE'] == '3' || im['STATE'] == '5' %> + failed <% elsif im['STATE'] == '1' || im['STATE'] == '2' %> - available + available + <% elsif im['STATE'] == '4'%> + pending <% end %> - <%= erb_user_name %> + <%= erb_user_name %> <% if im['PUBLIC'] == '0' %> - false + false <% elsif im['PUBLIC'] == '1' %> - true + true <% end %> - i386 - machine - + i386 + machine + <% end %> - - + +