def restore_vm(self, new_vm, new_name, size, qvm_create_args, vm_keys, backup_storage_vm):
subprocess.check_call("qvm-create "+shlex.quote(new_name)+" "+qvm_create_args, shell=True)
subprocess.check_call(["qvm-prefs", "-s", new_name, "netvm", "none"]) # Safe approach…
if size is not None:
subprocess.check_call(["qvm-grow-private", new_name, size])
with Dvm() as dvm:
dvm.attach("xvdz", new_vm.private_volume())
try:
if size is not None:
dvm.check_call("sudo e2fsck -f -p /dev/xvdz")
dvm.check_call("sudo resize2fs /dev/xvdz")
dvm.check_call("sudo mkdir /mnt/clone")
dvm.check_call("sudo mount /dev/xvdz /mnt/clone")
try:
self.upload_agent(dvm)
with self.add_permissions(backup_storage_vm, dvm, vm_keys.encrypted_name):
dvm.check_call("/tmp/restore-agent "+shlex.quote(backup_storage_vm.get_name())+" "+shlex.quote(vm_keys.encrypted_name), input = vm_keys.key, stdout = None, stderr = None)
finally: dvm.check_call("sudo umount /mnt/clone")
finally: dvm.detach_all()
# abstract def upload_agent(self, dvm)
评论列表
文章目录