From 999b183c836525b0a6a3488a3309d524498745cd Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Thu, 15 Apr 2010 17:07:03 +0200 Subject: [PATCH] Introuce a new cluster parameter - reserved_lvs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This parameter, which is a list of regular expression patterns, will make cluster verify ignore any such LVs. It will not prevent creation or removal of such volumes by the backend code. Signed-off-by: Iustin Pop <iustin@google.com> Reviewed-by: RenΓ© Nussbaumer <rn@google.com> --- lib/cmdlib.py | 13 +++++++++---- lib/objects.py | 5 +++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index ea5331dce..37e0e1647 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -1654,20 +1654,24 @@ class LUVerifyCluster(LogicalUnit): _ErrorIf(test, self.EINSTANCEWRONGNODE, instance, "instance should not run on node %s", node) - def _VerifyOrphanVolumes(self, node_vol_should, node_image): + def _VerifyOrphanVolumes(self, node_vol_should, node_image, reserved): """Verify if there are any unknown volumes in the cluster. The .os, .swap and backup volumes are ignored. All other volumes are reported as unknown. + @type reserved: L{ganeti.utils.FieldSet} + @param reserved: a FieldSet of reserved volume names + """ for node, n_img in node_image.items(): if n_img.offline or n_img.rpc_fail or n_img.lvm_fail: # skip non-healthy nodes continue for volume in n_img.volumes: - test = (node not in node_vol_should or - volume not in node_vol_should[node]) + test = ((node not in node_vol_should or + volume not in node_vol_should[node]) and + not reserved.Matches(volume)) self._ErrorIf(test, self.ENODEORPHANLV, node, "volume %s is unknown", volume) @@ -2232,7 +2236,8 @@ class LUVerifyCluster(LogicalUnit): "instance lives on ghost node %s", node) feedback_fn("* Verifying orphan volumes") - self._VerifyOrphanVolumes(node_vol_should, node_image) + reserved = utils.FieldSet(*cluster.reserved_lvs) + self._VerifyOrphanVolumes(node_vol_should, node_image, reserved) feedback_fn("* Verifying orphan instances") self._VerifyOrphanInstances(instancelist, node_image) diff --git a/lib/objects.py b/lib/objects.py index be6f2d714..8b5e1e7a9 100644 --- a/lib/objects.py +++ b/lib/objects.py @@ -898,6 +898,7 @@ class Cluster(TaggableObject): "tcpudp_port_pool", "mac_prefix", "volume_group_name", + "reserved_lvs", "drbd_usermode_helper", "default_bridge", "default_hypervisor", @@ -979,6 +980,10 @@ class Cluster(TaggableObject): if self.default_iallocator is None: self.default_iallocator = "" + # reserved_lvs added before 2.2 + if self.reserved_lvs is None: + self.reserved_lvs = [] + def ToDict(self): """Custom function for cluster. -- GitLab