mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-22 18:50:08 +03:00
feature #200: Removed unneeded rm component for cloud servers
This commit is contained in:
parent
1078c304c0
commit
64560518ce
@ -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="<IMAGE>\n"
|
||||
xml<<" <ID>#{id}</ID>\n"
|
||||
xml<<" <OWNER>#{owner}</OWNER>\n"
|
||||
xml<<" <NAME>#{name}</NAME>\n"
|
||||
xml<<" <DESCRIPTION>#{description}</DESCRIPTION>\n"
|
||||
xml<<" <PATH>#{path}</PATH>\n"
|
||||
xml<<" <SIZE>#{size}</SIZE>\n"
|
||||
xml<<" <MD5>#{md5}</MD5>\n"
|
||||
xml<<"</IMAGE>\n"
|
||||
end
|
||||
|
||||
# Like to_xml but does not show image file path data
|
||||
def to_xml_lite
|
||||
xml="<IMAGE>\n"
|
||||
xml<<" <ID>#{id}</ID>\n"
|
||||
xml<<" <OWNER>#{owner}</OWNER>\n"
|
||||
xml<<" <NAME>#{name}</NAME>\n"
|
||||
xml<<" <DESCRIPTION>#{description}</DESCRIPTION>\n"
|
||||
xml<<" <SIZE>#{size}</SIZE>\n"
|
||||
xml<<" <MD5>#{md5}</MD5>\n"
|
||||
xml<<"</IMAGE>\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
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user