storage: added create_from_url method to Disk
Showing
... | ... | @@ -223,6 +223,42 @@ class Disk(AclBase, TimeStampedModel): |
return local_tasks.deploy.apply_async(args=[self, user], | ||
queue="localhost.man") | ||
@classmethod | ||
def create_empty(cls, params={}, user=None): | ||
disk = cls() | ||
disk.__dict__.update(params) | ||
disk.save() | ||
return disk | ||
@classmethod | ||
def create_from_url_async(cls, url, params, user=None): | ||
return local_tasks.create_from_url.apply_async(args=[cls, url, params, | ||
user], | ||
queue='localhost.man') | ||
@classmethod | ||
def create_from_url(cls, url, params={}, user=None, task_uuid=None): | ||
disk = cls() | ||
disk.filename = str(uuid.uuid4()) | ||
disk.type = "iso" | ||
disk.size = 1 | ||
disk.datastore = DataStore.objects.all()[0] | ||
disk.__dict__.update(params) | ||
disk.save() | ||
queue_name = disk.get_remote_queue_name('storage') | ||
def __onabort(activity, error): | ||
Please
register
or
sign in
to reply
|
||
activity.disk.delete() | ||
raise error | ||
with disk_activity(code_suffix='download', disk=disk, | ||
task_uuid=task_uuid, user=user): | ||
size = remote_tasks.download.apply_async( | ||
kwargs={'url': url, 'disk': disk.get_disk_desc()}, | ||
queue=queue_name).get() | ||
disk.size = size | ||
disk.save() | ||
def destroy(self, user=None, task_uuid=None): | ||
if self.destroyed: | ||
return False | ||
... | ... |