diff --git a/lib/client/gnt_instance.py b/lib/client/gnt_instance.py index 7a685140c2436e616c7bf7db37b1aad109fc1ad5..402629d09c4a8c5c71733a207e529471deaf187f 100644 --- a/lib/client/gnt_instance.py +++ b/lib/client/gnt_instance.py @@ -985,7 +985,7 @@ def _FormatLogicalID(dev_type, logical_id, roman): return data -def _FormatBlockDevInfo(idx, top_level, dev, static, roman): +def _FormatBlockDevInfo(idx, top_level, dev, roman): """Show block device information. This is only used by L{ShowInstanceConfig}, but it's too big to be @@ -997,9 +997,6 @@ def _FormatBlockDevInfo(idx, top_level, dev, static, roman): @param top_level: if this a top-level disk? @type dev: dict @param dev: dictionary with disk information - @type static: boolean - @param static: wheter the device information doesn't contain - runtime information but only static data @type roman: boolean @param roman: whether to try to use roman integers @return: a list of either strings, tuples or lists @@ -1087,15 +1084,17 @@ def _FormatBlockDevInfo(idx, top_level, dev, static, roman): elif dev["physical_id"] is not None: data.append("physical_id:") data.append([dev["physical_id"]]) - if not static: + + if dev["pstatus"]: data.append(("on primary", helper(dev["dev_type"], dev["pstatus"]))) - if dev["sstatus"] and not static: + + if dev["sstatus"]: data.append(("on secondary", helper(dev["dev_type"], dev["sstatus"]))) if dev["children"]: data.append("child devices:") for c_idx, child in enumerate(dev["children"]): - data.append(_FormatBlockDevInfo(c_idx, False, child, static, roman)) + data.append(_FormatBlockDevInfo(c_idx, False, child, roman)) d1.append(data) return d1 @@ -1169,7 +1168,7 @@ def ShowInstanceConfig(opts, args): buf.write("Creation time: %s\n" % utils.FormatTime(instance["ctime"])) buf.write("Modification time: %s\n" % utils.FormatTime(instance["mtime"])) buf.write("State: configured to be %s" % instance["config_state"]) - if not opts.static: + if instance["run_state"]: buf.write(", actual state is %s" % instance["run_state"]) buf.write("\n") ##buf.write("Considered for memory checks in cluster verify: %s\n" % @@ -1223,7 +1222,7 @@ def ShowInstanceConfig(opts, args): buf.write(" Disks:\n") for idx, device in enumerate(instance["disks"]): - _FormatList(buf, _FormatBlockDevInfo(idx, True, device, opts.static, + _FormatList(buf, _FormatBlockDevInfo(idx, True, device, opts.roman_integers), 2) ToStdout(buf.getvalue().rstrip('\n')) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 0cbe51559a00c95b33a25c4ef60500fb1eb50924..25e3ad5c0e4c6c7b27430867b0b79cd1a8817337 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -10199,8 +10199,9 @@ class LUInstanceQueryData(NoHooksLU): dev_sstatus = self._ComputeBlockdevStatus(snode, instance.name, dev) if dev.children: - dev_children = [self._ComputeDiskStatus(instance, snode, child) - for child in dev.children] + dev_children = map(compat.partial(self._ComputeDiskStatus, + instance, snode), + dev.children) else: dev_children = [] @@ -10223,7 +10224,15 @@ class LUInstanceQueryData(NoHooksLU): cluster = self.cfg.GetClusterInfo() for instance in self.wanted_instances: - if not self.op.static: + pnode = self.cfg.GetNodeInfo(instance.primary_node) + + if self.op.static or pnode.offline: + remote_state = None + if pnode.offline: + self.LogWarning("Primary node %s is marked offline, returning static" + " information only for instance %s" % + (pnode.name, instance.name)) + else: remote_info = self.rpc.call_instance_info(instance.primary_node, instance.name, instance.hypervisor) @@ -10233,15 +10242,14 @@ class LUInstanceQueryData(NoHooksLU): remote_state = "up" else: remote_state = "down" - else: - remote_state = None + if instance.admin_up: config_state = "up" else: config_state = "down" - disks = [self._ComputeDiskStatus(instance, None, device) - for device in instance.disks] + disks = map(compat.partial(self._ComputeDiskStatus, instance, None), + instance.disks) result[instance.name] = { "name": instance.name,