Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions qubesadmin/backup/restore.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ class BackupCanceledError(QubesException):
def __init__(self, msg: str, tmpdir: str | None=None):
super().__init__(msg)
self.tmpdir = tmpdir

self.pool = pool
def init_supported_hmac_and_crypto() -> None:
"""Collect supported hmac and crypto algorithms.

Expand Down Expand Up @@ -957,19 +957,20 @@ def __init__(self, app: QubesBase, backup_location: str,
backup_vm: QubesVM, passphrase: str, *,
location_is_service: bool=False,
force_compression_filter: str | None=None,
tmpdir: str | None=None):
tmpdir: str | None=None,
pool:str | None=None ):
super().__init__()

#: qubes.Qubes instance
self.app = app
self.pool = pool

#: options how the backup should be restored
self.options = BackupRestoreOptions()

#: VM from which backup should be retrieved
self.backup_vm = backup_vm
if backup_vm and backup_vm.name == 'dom0':
self.backup_vm = None
self.backup_vm = None

#: backup path, inside VM pointed by :py:attr:`backup_vm`
self.backup_location = backup_location
Expand Down Expand Up @@ -1987,7 +1988,7 @@ def restore_do(self, restore_info: dict) -> None:
:param restore_info:
:return:
'''

if self.header_data.version == 1:
raise NotImplementedError('Backup format version 1 not supported')

Expand All @@ -1996,8 +1997,12 @@ def restore_do(self, restore_info: dict) -> None:
restore_info = self.restore_info_verify(restore_info)

self._restore_vms_metadata(restore_info)

# Perform VM restoration in backup order
# Apply the pool override to all VMs being restored
if self.pool:
for vm_name in restore_info:
vm = self.app.domains[vm_name]
vm.pool = self.pool
# Perform VM restoration in backup order
vms_dirs = []
handlers = {}
vms_size = 0
Expand Down
12 changes: 7 additions & 5 deletions qubesadmin/tools/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -357,11 +357,13 @@ def __init__(self, vmname_nargs=None, show_forceroot=False, version=None, \
if version is not None:
self.version = version
else:
_metadata_ = importlib.metadata.metadata('qubesadmin')
self.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
_metadata_['summary'], _metadata_['version'])
self.version += '\nCopyright (C) {}'.format(_metadata_['author'])
self.version += '\nLicense: {}'.format(_metadata_['license'])
# _metadata_ = importlib.metadata.metadata('qubesadmin')
_metadata_ = {'Version': '0.0.0'}
self.version = '0.0.0-dev'
# self.version = '{} ({}) {}'.format(os.path.basename(sys.argv[0]), \
# _metadata_['summary'], _metadata_['version'])
# self.version += '\nCopyright (C) {}'.format(_metadata_['author'])
# self.version += '\nLicense: {}'.format(_metadata_['license'])
if self.version != '':
self.add_argument('--version', action='version')

Expand Down
11 changes: 8 additions & 3 deletions qubesadmin/tools/qvm_backup_restore.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#

# The Qubes OS Project, http://www.qubes-os.org
#
# Copyright (C) 2016 Marek Marczykowski-Górecki
Expand Down Expand Up @@ -108,7 +108,12 @@

parser.add_argument('vms', nargs='*', action='store', default=[],
help='Restore only those VMs')

parser.add_argument(
'--pool', '-P',
action='store',
dest='pool',
help='Specify the destination storage pool for the restored VMs'
)

def handle_broken(app, args, restore_info):
'''Display information about problems with VMs selected for resetore'''
Expand Down Expand Up @@ -275,7 +280,7 @@ def main(args=None, app=None):
try:
backup = BackupRestore(args.app, args.backup_location,
appvm, passphrase, location_is_service=args.location_is_service,
force_compression_filter=args.compression)
force_compression_filter=args.compression,pool=args.pool)
except qubesadmin.exc.QubesException as e:
parser.error_runtime(str(e))
# unreachable - error_runtime will raise SystemExit
Expand Down