diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded index 1367f226ef133fcf33c1acb069265ff9ffcce28c..96a642bd3a26e95eda8f17f3707c42d8229b7768 100755 --- a/daemons/ganeti-noded +++ b/daemons/ganeti-noded @@ -310,10 +310,7 @@ class NodeHttpServer(http.server.HttpServer): """ path = params[0] - einfo = backend.ExportInfo(path) - if einfo is None: - return einfo - return einfo.Dumps() + return backend.ExportInfo(path) @staticmethod def perspective_export_list(params): diff --git a/lib/backend.py b/lib/backend.py index 2983399162cd2611832f088ca1ab2c673fff7b08..82011a0eea585f235ff0c6d14dba60e62b9c8d40 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -1900,9 +1900,9 @@ def ExportInfo(dest): if (not config.has_section(constants.INISECT_EXP) or not config.has_section(constants.INISECT_INS)): - return None + _Fail("Export info file doesn't have the required fields") - return config + return True, config.Dumps() def ImportOSIntoInstance(instance, src_node, src_images, cluster_name): diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 0394126a0f39017fee85f0515c6c1474b2dc5531..d2d433efac9d403d7f72cf3699c46eaf391df57b 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -4688,11 +4688,12 @@ class LUCreateInstance(LogicalUnit): _CheckNodeOnline(self, src_node) result = self.rpc.call_export_info(src_node, src_path) - result.Raise() - if not result.data: - raise errors.OpPrereqError("No export found in dir %s" % src_path) + msg = result.RemoteFailMsg() + if msg: + raise errors.OpPrereqError("No export or invalid export found in" + " dir %s: %s" % (src_path, msg)) - export_info = result.data + export_info = objects.SerializableConfigParser.Loads(str(result.payload)) if not export_info.has_section(constants.INISECT_EXP): raise errors.ProgrammerError("Corrupted export config") diff --git a/lib/rpc.py b/lib/rpc.py index 9e50a0ac441f7aabbf355e25ee798abb2d77979a..7d6b266143a62b2b29d7bc7f277190636cbe933f 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -974,10 +974,7 @@ class RpcRunner(object): This is a single-node call. """ - result = self._SingleNodeCall(node, "export_info", [path]) - if not result.failed and result.data: - result.data = objects.SerializableConfigParser.Loads(str(result.data)) - return result + return self._SingleNodeCall(node, "export_info", [path]) def call_instance_os_import(self, node, inst, src_node, src_images, cluster_name):