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 cm.models.system_image_group
import SystemImageGroup
39 from common.states
import image_access, image_states
40 from common.hardware
import disk_filesystems, disk_controllers, video_devices, network_devices
42 from cm.utils.threads.image
import CopyImage
59 def download(caller_id, description, name, path, disk_controller, network_device, platform, video_device):
63 connection = urllib.urlopen(path)
64 size = int(connection.info()[
"Content-Length"])
66 log.exception(caller_id,
'Cannot find image')
67 raise CMException(
'image_not_found')
69 log.exception(caller_id,
'Cannot calculate size')
70 raise CMException(
'image_calculate_size')
72 user = User.get(caller_id)
74 image = SystemImage.create(name=name, description=description, user=user, platform=platform,
75 disk_controller=disk_controller, network_device=network_device,
76 video_device=video_device)
81 log.error(caller_id,
"Unable to save image to DB: %s" % str(e))
82 raise CMException(
'image_create')
84 DownloadImage(image, path, size).
start()
98 def get_list(caller_id, access, group_id=None):
100 images = SystemImage.objects.exclude(state=image_states[
'locked']).filter(access=access)
104 if access == image_access[
'group']:
105 images = images.filter(systemimagegroup__group_id__in=group_id)
107 return [img.dict
for img
in images]
119 return SystemImage.admin_get(system_image_id).dict
132 def delete(caller_id, system_image_id_list):
133 for system_image_id
in system_image_id_list:
134 image = SystemImage.admin_get(system_image_id)
135 image.state = image_states[
'locked']
153 def edit(caller_id, system_image_id, name=None, description=None, disk_controller=None, video_device=None, network_device=None, platform=None):
155 image = SystemImage.admin_get(system_image_id)
157 if image.state != image_states[
'ok']:
158 raise CMException(
'image_edit')
163 image.description = description
165 image.disk_controller = disk_controller
167 image.video_device = video_device
169 image.network_device = network_device
171 image.platform = platform
175 raise CMException(
'image_edit')
188 image = SystemImage.admin_get(system_image_id)
189 image.access = image_access[
'private']
193 image.systemimagegroup_set.all().
delete()
195 log.exception(caller_id,
'image_set_private')
196 raise CMException(
'image_set_private')
213 image = SystemImage.admin_get(system_image_id)
214 image.access = image_access[
'group']
217 ig = SystemImageGroup()
219 ig.group_id = group_id
224 raise CMException(
'image_set_group')
237 image = SystemImage.admin_get(system_image_id)
238 image.access = image_access[
'public']
241 image.systemimagegroup_set.all().
delete()
244 raise CMException(
'image_set_public')
258 image = SystemImage.admin_get(system_image_id)
260 storage_image = StorageImage.create(name=image.name, description=image.description, user=image.user,
261 disk_controller=image.disk_controller)
262 storage_image.state = image_states[
'ok']
263 storage_image.size = image.size
267 os.rename(image.path, storage_image.path)
270 raise CMException(
'image_change_type')
280 return disk_filesystems
300 return network_devices
310 return disk_controllers
322 def copy(caller_id, src_image_id, dest_user_id):
323 src_image = SystemImage.admin_get(src_image_id)
324 dest_user = User.get(dest_user_id)
325 dest_image = SystemImage.create(name=src_image.name, description=src_image.description, user=dest_user,
326 platform=src_image.platform, disk_controller=src_image.disk_controller,
327 network_device=src_image.network_device, video_device=src_image.video_device)
332 log.error(caller_id,
"Unable to commit: %s" % str(e))
333 raise CMException(
'image_create')
335 CopyImage(src_image, dest_image).
start()