The check for file consistency didn't properly handle virtual paths
in case of a virtual cluster. This didn't cause any breakage as in
a standard virtual cluster setup with only one node all files are
visible for every node.
---
lib/backend.py | 7 +++++--
lib/cmdlib.py | 13 +++++++++----
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/lib/backend.py b/lib/backend.py
index 07ffa75..4a87fdb 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -644,8 +644,11 @@ def VerifyNode(what, cluster_name):
tmp.append((source, hv_name, str(err)))
if constants.NV_FILELIST in what:
- result[constants.NV_FILELIST] = utils.FingerprintFiles(
- what[constants.NV_FILELIST])
+ fingerprints = utils.FingerprintFiles(map(vcluster.LocalizeVirtualPath,
+ what[constants.NV_FILELIST]))
+ result[constants.NV_FILELIST] = \
+ dict((vcluster.MakeVirtualPath(key), value)
+ for (key, value) in fingerprints.items())
if constants.NV_NODELIST in what:
(nodes, bynode) = what[constants.NV_NODELIST]
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index ae08146..b72276c 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -60,6 +60,7 @@ from ganeti import ht
from ganeti import rpc
from ganeti import runtime
from ganeti import pathutils
+from ganeti import vcluster
from ganeti.masterd import iallocator
import ganeti.masterd.instance # pylint: disable=W0611
@@ -2549,7 +2550,10 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
if nresult.fail_msg or not nresult.payload:
node_files = None
else:
- node_files = nresult.payload.get(constants.NV_FILELIST, None)
+ fingerprints = nresult.payload.get(constants.NV_FILELIST, None)
+ node_files = dict((vcluster.LocalizeVirtualPath(key), value)
+ for (key, value) in fingerprints.items())
+ del fingerprints
test = not (node_files and isinstance(node_files, dict))
errorif(test, constants.CV_ENODEFILECHECK, node.name,
@@ -3073,9 +3077,10 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
node_verify_param = {
constants.NV_FILELIST:
- utils.UniqueSequence(filename
- for files in filemap
- for filename in files),
+ map(vcluster.MakeVirtualPath,
+ utils.UniqueSequence(filename
+ for files in filemap
+ for filename in files)),
constants.NV_NODELIST:
self._SelectSshCheckNodes(node_data_list, self.group_uuid,
self.all_node_info.values()),
--
1.7.7.3