From b07a9f051389cb6e90e1642127b339d85f883c3c Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Tue, 9 Oct 2007 11:15:23 +0000 Subject: [PATCH] Refactor DiagnoseOS The new version debugs Hidden OSes as well. Reviewed-by: iustinp --- scripts/gnt-os | 72 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 56 insertions(+), 16 deletions(-) diff --git a/scripts/gnt-os b/scripts/gnt-os index 899185af0..646e39780 100755 --- a/scripts/gnt-os +++ b/scripts/gnt-os @@ -66,6 +66,38 @@ def ListOS(opts, args): return 0 +def _DiagnoseOSValid(obj): + """Verify whether an OS diagnose object represents a valid OS + + Args: + obj: an diagnostic object as returned by OpDiagnoseOS + + Returns: + bool: OS validity status + """ + + if isinstance(obj, objects.OS): + return True + elif isinstance(obj, errors.InvalidOS): + return False + else: + raise errors.ProgrammerError('unknown OS diagnose type') + +def _DiagnoseOSStatus(obj): + """Generate a status message for an OS diagnose object. + + Args: + obj: an diagnostic object as returned by OpDiagnoseOS + + Returns: + string: a description of the OS status + """ + + if _DiagnoseOSValid(obj): + return "valid (path: %s)" % obj.path + else: + return "%s (path: %s)" % (obj.args[2], obj.args[1]) + def DiagnoseOS(opts, args): """Analyse all OSes on this cluster. @@ -106,18 +138,18 @@ def DiagnoseOS(opts, args): 'Details')) for os_name in all_os: - nodes_valid = [] + nodes_valid = {} nodes_bad = {} for node_name in node_data: if node_name in all_os[os_name]: - nos = all_os[os_name][node_name] - if isinstance(nos[0], objects.OS): - nodes_valid.append(node_name) - elif isinstance(nos[0], errors.InvalidOS): - nodes_bad[node_name] = ("%s (path: %s)" % - (nos[0].args[2], nos[0].args[1])) + first_os = all_os[os_name][node_name].pop(0) + first_os_status = _DiagnoseOSStatus(first_os) + if _DiagnoseOSValid(first_os): + nodes_valid[node_name] = first_os_status + else: + nodes_bad[node_name] = first_os_status else: - nodes_bad[node_name] = "os dir not found" + nodes_bad[node_name] = "OS not found" if nodes_valid and not nodes_bad: status = "valid" @@ -126,15 +158,23 @@ def DiagnoseOS(opts, args): else: status = "partial valid" + def _OutputNodeHiddenOSStatus(dobj_list): + for dobj in dobj_list: + logger.ToStdout(format % (max_name, "", max_node, "", + "[hidden] %s" % + _DiagnoseOSStatus(dobj))) + + def _OutputPerNodeOSStatus(status_map): + map_k = utils.NiceSort(status_map.keys()) + for node_name in map_k: + logger.ToStdout(format % (max_name, "", max_node, + node_name, status_map[node_name])) + if node_name in all_os[os_name]: + _OutputNodeHiddenOSStatus(all_os[os_name][node_name]) + logger.ToStdout(format % (max_name, os_name, max_node, status, "")) - nodes_valid = utils.NiceSort(nodes_valid) - for node_name in nodes_valid: - logger.ToStdout(format % (max_name, "", max_node, node_name, - "valid (path: %s)" % all_os[os_name][node_name][0].path)) - nbk = utils.NiceSort(nodes_bad.keys()) - for node_name in nbk: - logger.ToStdout(format % (max_name, "", max_node, - node_name, nodes_bad[node_name])) + _OutputPerNodeOSStatus(nodes_valid) + _OutputPerNodeOSStatus(nodes_bad) commands = { -- GitLab