Skip to content

Commit bb50a9a

Browse files
committed
Revert to red label while restoring on missing labels
If we allow users to create custom labels and they backup such qubes, restore operation will fail on new systems without those custom labels. Fix this by reverting to red label and allow users to restore their backup. fixes: QubesOS/qubes-issues#9781
1 parent 581531c commit bb50a9a

3 files changed

Lines changed: 22 additions & 4 deletions

File tree

.gitlab-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ checks:tests:
2020
- ci/codecov-wrapper
2121
before_script:
2222
- sudo dnf install -y openssl python3-rpm sequoia-sqv python3-xlib libnotify
23-
xorg-x11-server-Xvfb
23+
xorg-x11-server-Xvfb scrypt
2424
- pip3 install --quiet -r ci/requirements.txt
2525
- git config --global --add safe.directory "$PWD"
2626
script:

qubesadmin/backup/restore.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2020,6 +2020,12 @@ def _restore_vms_metadata(self, restore_info):
20202020
# can't create vm, but need backup info
20212021
new_vm = self.backup_app.domains[vm_name]
20222022
else:
2023+
# do not fail if VM had a custom label. revert to red label
2024+
if not vm.label in self.app.labels:
2025+
self.log.warning(
2026+
'Reverting to red label while restoring %s ' \
2027+
'since %s label does not exist', vm.name, vm.label)
2028+
vm.label = "red"
20232029
try:
20242030
# first only create VMs, later setting may require other VMs
20252031
# be already created

qubesadmin/tests/backup/backupcompatibility.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@
695695
},
696696
'test-net': {
697697
'klass': 'AppVM',
698-
'label': 'red',
698+
'label': 'scarlet',
699699
'properties': {
700700
'maxmem': '300',
701701
'memory': '300',
@@ -749,8 +749,11 @@ def assertCorrectlyConverted(self, backup_app, expected_data):
749749
expected_data['domains'][vm]['template'], vm)
750750
self.assertEqual(backup_app.domains[vm].klass,
751751
expected_data['domains'][vm]['klass'], vm)
752-
self.assertEqual(backup_app.domains[vm].label,
753-
expected_data['domains'][vm]['label'], vm)
752+
if expected_data['domains'][vm]['label'] == 'scarlet':
753+
self.assertEqual(backup_app.domains[vm].label, 'red', vm)
754+
else:
755+
self.assertEqual(backup_app.domains[vm].label,
756+
expected_data['domains'][vm]['label'], vm)
754757
self.assertEqual(backup_app.domains[vm].backup_path,
755758
expected_data['domains'][vm]['backup_path'], vm)
756759
self.assertEqual(backup_app.domains[vm].included_in_backup,
@@ -1511,6 +1514,9 @@ def test_210_r2(self):
15111514
b'fedora-25 class=TemplateVM state=Halted\n'
15121515
b'testvm class=AppVM state=Running\n'
15131516
)
1517+
self.app.expected_calls[('dom0', 'admin.label.List', None, None)] = (
1518+
b'0\0red\norange\nyellow\ngreen\ngray\nblue\npurple\nblack\n'
1519+
)
15141520
self.app.expected_calls[
15151521
('dom0', 'admin.property.Get', 'default_template', None)] = \
15161522
b'0\0default=no type=vm fedora-25'
@@ -1579,6 +1585,9 @@ def test_220_r2_encrypted(self):
15791585
b'fedora-25 class=TemplateVM state=Halted\n'
15801586
b'testvm class=AppVM state=Running\n'
15811587
)
1588+
self.app.expected_calls[('dom0', 'admin.label.List', None, None)] = (
1589+
b'0\0red\norange\nyellow\ngreen\ngray\nblue\npurple\nblack\n'
1590+
)
15821591
self.app.expected_calls[
15831592
('dom0', 'admin.property.Get', 'default_template', None)] = \
15841593
b'0\0default=no type=vm fedora-25'
@@ -1647,6 +1656,9 @@ def test_230_r2_uncompressed(self):
16471656
b'fedora-25 class=TemplateVM state=Halted\n'
16481657
b'testvm class=AppVM state=Running\n'
16491658
)
1659+
self.app.expected_calls[('dom0', 'admin.label.List', None, None)] = (
1660+
b'0\0red\norange\nyellow\ngreen\ngray\nblue\npurple\nblack\n'
1661+
)
16501662
self.app.expected_calls[
16511663
('dom0', 'admin.property.Get', 'default_template', None)] = \
16521664
b'0\0default=no type=vm fedora-25'

0 commit comments

Comments
 (0)