Commit 9daef8ff by Dudás Ádám

vm: discard incomplete template on error

fixes #67
parent 6ab9e981
...@@ -935,22 +935,30 @@ class Instance(AclBase, VirtualMachineDescModel, TimeStampedModel): ...@@ -935,22 +935,30 @@ class Instance(AclBase, VirtualMachineDescModel, TimeStampedModel):
kwargs.setdefault('access_method', self.access_method) kwargs.setdefault('access_method', self.access_method)
kwargs.setdefault('system', self.template.system kwargs.setdefault('system', self.template.system
if self.template else None) if self.template else None)
def __try_save_disk(disk):
try:
return disk.save_as()
except Disk.WrongDiskTypeError:
return disk
# copy disks
disks = [__try_save_disk(disk) for disk in self.disks.all()]
kwargs.setdefault('disks', disks)
# create template and do additional setup # create template and do additional setup
tmpl = InstanceTemplate(**kwargs) tmpl = InstanceTemplate(**kwargs)
# save template # save template
tmpl.save() tmpl.save()
# create related entities
for disk in self.disks.all():
try: try:
d = disk.save_as() # create interface templates
except Disk.WrongDiskTypeError:
d = disk
tmpl.disks.add(d)
for i in self.interface_set.all(): for i in self.interface_set.all():
i.save_as_template(tmpl) i.save_as_template(tmpl)
except:
tmpl.delete()
raise
else:
return tmpl return tmpl
def shutdown_and_save_as_template(self, name, user=None, task_uuid=None, def shutdown_and_save_as_template(self, name, user=None, task_uuid=None,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment