558728377c
f5d709d9-lang-it-1.patch c66098f3-lang-it-2.patch 452a693e-lang-update.patch 6b5106ea-lang-it-ko-fix.patch 9c8ffe51-fix-multiple-warnings-1.patch cb182f7e-skip-authentication-only-for-VNC-with-listen-type-none.patch 0610cd6a-ensure-bool-value-used-for-set_sensitive-call.patch f341352c-remove-redundant-error-string.patch ff3b4dc5-dont-overwrite-install-bootorder.patch 2099a194-reset-guest-domain-to-none-on-domain-creation-error.patch 7aee124d-fix-multiple-warnings-2.patch - Check for SLE15 and Leap 15 bsc#1035779 virtman-default-guest-from-host-os.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=348
125 lines
4.8 KiB
Diff
125 lines
4.8 KiB
Diff
Subject: storage: Move alloc/cap validation to validate()
|
|
From: Cole Robinson crobinso@redhat.com Fri Mar 17 12:00:03 2017 -0400
|
|
Date: Fri Mar 17 12:14:05 2017 -0400:
|
|
Git: 9c8ffe51dacee208af4d5d7cc3e439ae7197fc09
|
|
|
|
Doing this at property set time is overly noisy. Follow the same
|
|
pattern of VirtualDisk and only do this in the validate() function.
|
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=1433239
|
|
|
|
diff --git a/virtinst/diskbackend.py b/virtinst/diskbackend.py
|
|
index f70f5b21..5198057c 100644
|
|
--- a/virtinst/diskbackend.py
|
|
+++ b/virtinst/diskbackend.py
|
|
@@ -345,10 +345,11 @@ class _StorageCreator(_StorageBase):
|
|
|
|
if self._vol_install:
|
|
self._vol_install.validate()
|
|
- else:
|
|
- if self._size is None:
|
|
- raise ValueError(_("size is required for non-existent disk "
|
|
- "'%s'" % self.get_path()))
|
|
+ return
|
|
+
|
|
+ if self._size is None:
|
|
+ raise ValueError(_("size is required for non-existent disk "
|
|
+ "'%s'" % self.get_path()))
|
|
|
|
err, msg = self.is_size_conflict()
|
|
if err:
|
|
diff --git a/virtinst/storage.py b/virtinst/storage.py
|
|
index cd74467a..808891f3 100644
|
|
--- a/virtinst/storage.py
|
|
+++ b/virtinst/storage.py
|
|
@@ -683,22 +683,6 @@ class StorageVolume(_StorageObject):
|
|
raise ValueError(_("Name '%s' already in use by another volume." %
|
|
name))
|
|
|
|
- def _validate_allocation(self, val):
|
|
- ret = self.is_size_conflict(allocation=val)
|
|
- if ret[0]:
|
|
- raise ValueError(ret[1])
|
|
- elif ret[1]:
|
|
- logging.warn(ret[1])
|
|
- return val
|
|
-
|
|
- def _validate_capacity(self, val):
|
|
- ret = self.is_size_conflict(capacity=val)
|
|
- if ret[0]:
|
|
- raise ValueError(ret[1])
|
|
- elif ret[1]:
|
|
- logging.warn(ret[1])
|
|
- return val
|
|
-
|
|
def _default_format(self):
|
|
if self.file_type == self.TYPE_FILE:
|
|
return "raw"
|
|
@@ -728,10 +712,8 @@ class StorageVolume(_StorageObject):
|
|
|
|
type = XMLProperty("./@type")
|
|
key = XMLProperty("./key")
|
|
- capacity = XMLProperty("./capacity", is_int=True,
|
|
- validate_cb=_validate_capacity)
|
|
- allocation = XMLProperty("./allocation", is_int=True,
|
|
- validate_cb=_validate_allocation)
|
|
+ capacity = XMLProperty("./capacity", is_int=True)
|
|
+ allocation = XMLProperty("./allocation", is_int=True)
|
|
format = XMLProperty("./target/format/@type", default_cb=_default_format)
|
|
target_path = XMLProperty("./target/path")
|
|
backing_store = XMLProperty("./backingStore/path")
|
|
@@ -809,6 +791,12 @@ class StorageVolume(_StorageObject):
|
|
"setting allocation equal to capacity"))
|
|
self.allocation = self.capacity
|
|
|
|
+ isfatal, errmsg = self.is_size_conflict()
|
|
+ if isfatal:
|
|
+ raise ValueError(errmsg)
|
|
+ if errmsg:
|
|
+ logging.warn(errmsg)
|
|
+
|
|
def install(self, meter=None):
|
|
"""
|
|
Build and install storage volume from xml
|
|
@@ -891,7 +879,7 @@ class StorageVolume(_StorageObject):
|
|
time.sleep(1)
|
|
|
|
|
|
- def is_size_conflict(self, capacity=None, allocation=None):
|
|
+ def is_size_conflict(self):
|
|
"""
|
|
Report if requested size exceeds its pool's available amount
|
|
|
|
@@ -900,27 +888,22 @@ class StorageVolume(_StorageObject):
|
|
2. String message if some collision was encountered.
|
|
@rtype: 2 element C{tuple}: (C{bool}, C{str})
|
|
"""
|
|
- if capacity is None:
|
|
- capacity = self.capacity
|
|
- if allocation is None:
|
|
- allocation = self.allocation
|
|
-
|
|
if not self.pool:
|
|
return (False, "")
|
|
|
|
# pool info is [pool state, capacity, allocation, available]
|
|
avail = self.pool.info()[3]
|
|
- if allocation > avail:
|
|
+ if self.allocation > avail:
|
|
return (True, _("There is not enough free space on the storage "
|
|
"pool to create the volume. "
|
|
"(%d M requested allocation > %d M available)") %
|
|
- ((allocation / (1024 * 1024)),
|
|
+ ((self.allocation / (1024 * 1024)),
|
|
(avail / (1024 * 1024))))
|
|
- elif capacity > avail:
|
|
+ elif self.capacity > avail:
|
|
return (False, _("The requested volume capacity will exceed the "
|
|
"available pool space when the volume is fully "
|
|
"allocated. "
|
|
"(%d M requested capacity > %d M available)") %
|
|
- ((capacity / (1024 * 1024)),
|
|
+ ((self.capacity / (1024 * 1024)),
|
|
(avail / (1024 * 1024))))
|
|
return (False, "")
|