31 from cm.utils.decorators
import admin_cm_log
32 from cm.utils.exception
import CMException
33 from cm.utils
import log
34 from cm.utils.threads.image
import DownloadImage
35 from cm.models.user
import User
36 from cm.models.system_image
import SystemImage
37 from cm.models.storage_image
import StorageImage
38 from common.states
import image_states
40 from cm.utils.threads.image
import CopyImage
55 def download(caller_id, description, name, path, disk_dev, disk_controller):
59 connection = urllib.urlopen(path)
60 size = int(connection.info()[
"Content-Length"])
62 log.exception(
'Cannot find image')
63 raise CMException(
'image_not_found')
65 log.exception(caller_id,
'Cannot calculate size')
66 raise CMException(
'image_calculate_size')
68 user = User.get(caller_id)
70 image = StorageImage.create(name=name, description=description, user=user, disk_dev=disk_dev, disk_controller=disk_controller)
75 log.error(caller_id,
"Unable to save image to DB: %s" % str(e))
76 raise CMException(
'image_create')
78 DownloadImage(image, path, size).
start()
90 images = StorageImage.objects.exclude(state=image_states[
'locked'])
92 return [img.dict
for img
in images]
106 return StorageImage.admin_get(storage_image_id).dict
120 image = StorageImage.admin_get(storage_image_id)
122 image.check_attached()
123 image.state = image_states[
'locked']
138 def edit(caller_id, storage_image_id, name=None, description=None, disk_controller=None):
140 image = StorageImage.admin_get(storage_image_id)
142 if image.state != image_states[
'ok']:
143 raise CMException(
'image_edit')
148 image.description = description
150 image.disk_controller = disk_controller
155 raise CMException(
'image_edit')
169 image = StorageImage.admin_get(storage_image_id)
171 system_image = SystemImage.create(name=image.name, description=image.description, user=image.user, disk_controller=image.disk_controller)
172 system_image.state = image_states[
'ok']
173 system_image.size = image.size
177 os.rename(image.path, system_image.path)
180 raise CMException(
'image_change_type')
192 def copy(caller_id, src_image_id, dest_user_id):
193 src_image = StorageImage.admin_get(src_image_id)
194 dest_user = User.get(dest_user_id)
195 dest_image = StorageImage.create(name=src_image.name, description=src_image.description, user=dest_user,
196 disk_controller=src_image.disk_controller, size=src_image.size)
201 log.error(caller_id,
"Unable to commit: %s" % str(e))
202 raise CMException(
'image_create')
204 CopyImage(src_image, dest_image).
start()
216 image = StorageImage.admin_get(storage_image_id)