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.iso_image
import IsoImage
37 from common.states
import image_states
38 from cm.utils.threads.image
import CopyImage
54 def download(caller_id, description, name, path, disk_dev, disk_controller):
58 connection = urllib.urlopen(path)
59 size = int(connection.info()[
"Content-Length"])
61 log.exception(
'Cannot find image')
62 raise CMException(
'image_not_found')
64 log.exception(caller_id,
'Cannot calculate size')
65 raise CMException(
'image_calculate_size')
67 user = User.get(caller_id)
69 image = IsoImage.create(name=name, description=description, user=user, disk_dev=disk_dev, disk_controller=disk_controller)
74 log.error(caller_id,
"Unable to save image to DB: %s" % str(e))
75 raise CMException(
'image_create')
77 DownloadImage(image, path, size).
start()
88 images = IsoImage.objects.exclude(state=image_states[
'locked'])
90 return [img.dict
for img
in images]
102 return IsoImage.admin_get(iso_image_id).dict
116 image = IsoImage.admin_get(iso_image_id)
118 image.check_attached()
119 image.state = image_states[
'locked']
134 def edit(caller_id, iso_image_id, name=None, description=None, disk_controller=None):
136 image = IsoImage.admin_get(iso_image_id)
138 if image.state != image_states[
'ok']:
139 raise CMException(
'image_edit')
144 image.description = description
146 image.disk_controller = disk_controller
151 raise CMException(
'image_edit')
163 def copy(caller_id, src_image_id, dest_user_id):
164 src_image = IsoImage.admin_get(src_image_id)
165 dest_user = User.get(dest_user_id)
166 dest_image = IsoImage.create(name=src_image.name, description=src_image.description, user=dest_user,
167 disk_controller=src_image.disk_controller, disk_dev=src_image.disk_dev)
172 log.error(caller_id,
"Unable to commit: %s" % str(e))
173 raise CMException(
'image_create')
175 CopyImage(src_image, dest_image).
start()