diff --git a/src/cloud/rm/image.rb b/src/cloud/rm/image.rb deleted file mode 100644 index 15e9695d06..0000000000 --- a/src/cloud/rm/image.rb +++ /dev/null @@ -1,182 +0,0 @@ -# -------------------------------------------------------------------------- # -# Copyright 2002-2010, OpenNebula Project Leads (OpenNebula.org) # -# # -# Licensed 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 OpenNebula - class Image < Sequel::Model - plugin :schema - plugin :hook_class_methods - - # Creates the database table asociated with the model. It first - # checks for table existence before creating it so it is reasonably - # safe to call it when you load the library. - def self.initialize_table - set_schema do - primary_key :id, :type => Integer - int :owner - varchar :name - varchar :description - varchar :path - int :size - varchar :md5 - end - - create_table unless table_exists? - end - - # Makes sure the image is deleted from the repository after - # the record is deleted. Make sure that you use destroy and not - # delete as delete method does not call hooks. - before_destroy do - FileUtils.rm(self.path) - end - - # Specifies the directory where images will be stored - # dir:: _String_ directory where the images are stored - def self.image_dir=(dir) - @@image_dir=dir - end - - # Strips out non user writable columns - # metadata:: _Hash_ hash containing the data to add to the db - # [return] _Hash_ clean metadata - def self.sanitize_metadata(metadata) - metadata.reject {|key,value| - ![:name, :description].include? key - } - end - - # Creates a new Image object, fills it, copies the image - # to the repository and saves to the database - # owner:: _Integer_ identifier of the user that owns this image - # path:: _String_ place where to copy the image from - # metadata:: _Hash_ extra data to add to the image, like name and description - # [return] _Image_ newly created image - def self.create_image(owner, path, metadata={}) - sanitized_metadata=sanitize_metadata(metadata) - - data={ - :owner => owner, - }.merge(sanitized_metadata) - - image=Image.new(data) - - image.save - - # TODO: make copy or movement configurable - image.copy_image(path, true) - image.get_image_info - - image.save - - image - - # set metadata - end - - def identifier - self.id - end - - # Updates the image with the metadata provided. Currently only - # name and description can be changed - def change_metadata(metadata) - update(Image.sanitize_metadata(metadata)) - end - - # Copies the image from the source path to the image repository. - # Its name will be the image id. It also stores its new location - # in the object. - def copy_image(path, move=false) - if move - FileUtils.mv(path, image_path) - else - FileUtils.cp(path, image_path) - end - self.path=image_path - end - - # Returns the filename and path of the image file associated with - # this Image object. - def image_path - @@image_dir||='images' - File.join(@@image_dir, self.id.to_s) - end - - # Extracts md5 and size from the image file and stores these data - # in the object. - def get_image_info - self.md5=`md5sum #{image_path}`.split.first - self.size=File.size(image_path) - end - - # Adds a user to the list of allowed users of this image - def add_acl(user) - acl=ImageAcl.new({:image_id => self.id, :user => user}) - acl.save - end - - # Deletes a user fom the list of allowed users of this image - def del_acl(user) - acl=ImageAcl[:image_id => self.id, :user => user] - acl.destroy if acl - end - - # Checks if a user has permissions to use this image - def has_permission?(user) - return true if self.owner==user - ImageAcl[:image_id => self.id, :user => user]!=nil - end - - # Returns the xml representation of the image. - def to_xml - xml="\n" - xml<<" #{id}\n" - xml<<" #{owner}\n" - xml<<" #{name}\n" - xml<<" #{description}\n" - xml<<" #{path}\n" - xml<<" #{size}\n" - xml<<" #{md5}\n" - xml<<"\n" - end - - # Like to_xml but does not show image file path data - def to_xml_lite - xml="\n" - xml<<" #{id}\n" - xml<<" #{owner}\n" - xml<<" #{name}\n" - xml<<" #{description}\n" - xml<<" #{size}\n" - xml<<" #{md5}\n" - xml<<"\n" - end - end - - class ImageAcl < Sequel::Model - plugin :schema - - def self.initialize_table - set_schema do - primary_key :id, :type => Integer - varchar :image_id - int :user - end - - create_table unless table_exists? - end - end -end diff --git a/src/cloud/rm/repo_manager.rb b/src/cloud/rm/repo_manager.rb deleted file mode 100644 index fd3139f83f..0000000000 --- a/src/cloud/rm/repo_manager.rb +++ /dev/null @@ -1,66 +0,0 @@ -# -------------------------------------------------------------------------- # -# Copyright 2002-2010, OpenNebula Project Leads (OpenNebula.org) # -# # -# Licensed 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. # -#--------------------------------------------------------------------------- # - -require 'rubygems' -require 'fileutils' -require 'sequel' -require 'logger' - -module OpenNebula - class RepoManager - def initialize(rm_db=nil) - raise "DB not defined" if !rm_db - - @db=Sequel.sqlite(rm_db) - - require 'image' - - Image.initialize_table - ImageAcl.initialize_table - end - - def add(owner, path, metadata={}) - Image.create_image(owner, path, metadata) - end - - def get(image_id) - Image[:id => image_id] - end - - def update(image_id, metadata) - image=get(image_id) - image.update(metadata) - end - - - end - -end - -=begin -OpenNebula::Image.create_image(10, 'repo_manager.rb', - :name => 'nombre', - :noexiste => 'nada' -) -=end - -if $0 == __FILE__ - rm=OpenNebula::RepoManager.new - img=rm.add_image(rand(100), 'image.rb', - :name => 'nombre', - :description => 'desc') - puts img.to_xml -end