From fd3f19d4a667c06f741e3d72b676703ff0281bcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Wed, 7 Jun 2017 00:20:41 +0200 Subject: [PATCH] storage: fix VM rename When VM is renamed only volume.vid get updated, but not other attributes calculated from it. Convert them to dynamic properties to not worry about it. QubesOS/qubes-issues#2256 --- qubes/storage/file.py | 20 +++++++++++++------- qubes/storage/lvm.py | 5 ++++- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/qubes/storage/file.py b/qubes/storage/file.py index 98f4ce12..7b8e7979 100644 --- a/qubes/storage/file.py +++ b/qubes/storage/file.py @@ -329,20 +329,26 @@ class FileVolume(qubes.storage.Volume): raise qubes.storage.StoragePoolException(msg) if self._is_snapshot: - self.path = os.path.join(self.dir_path, self.source + '.img') img_name = self.source + '-cow.img' self.path_source_cow = os.path.join(self.dir_path, img_name) - img_name = self.vid + '-cow.img' - self.path_cow = os.path.join(self.dir_path, img_name) elif self._is_volume or self._is_volatile: - self.path = os.path.join(self.dir_path, self.vid + '.img') + pass elif self._is_origin: - self.path = os.path.join(self.dir_path, self.vid + '.img') - img_name = self.vid + '-cow.img' - self.path_cow = os.path.join(self.dir_path, img_name) + pass else: assert False, 'This should not happen' + @property + def path(self): + if self._is_snapshot: + return os.path.join(self.dir_path, self.source + '.img') + return os.path.join(self.dir_path, self.vid + '.img') + + @property + def path_cow(self): + img_name = self.vid + '-cow.img' + return os.path.join(self.dir_path, img_name) + def verify(self): ''' Verifies the volume. ''' if not os.path.exists(self.path) and not self._is_volatile: diff --git a/qubes/storage/lvm.py b/qubes/storage/lvm.py index 05cec116..a3193063 100644 --- a/qubes/storage/lvm.py +++ b/qubes/storage/lvm.py @@ -362,12 +362,15 @@ class ThinVolume(qubes.storage.Volume): msg = msg.format(self.name) raise qubes.storage.StoragePoolException(msg) - self.path = '/dev/' + self.vid if self.snap_on_start: self._vid_snap = self.vid + '-snap' self._size = size + @property + def path(self): + return '/dev/' + self.vid + @property def revisions(self): path = self.path + '-back'