diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index f929cd32490d7e44312883eaff5c5cfcd433d962..481b1255a11161055485ed7118b5b65a3069d4df 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -3072,9 +3072,11 @@ class LUDiagnoseOS(NoHooksLU):
("names", _EmptyList, _TListOf(_TNonEmptyString)),
]
REQ_BGL = False
+ _HID = "hidden"
+ _BLK = "blacklisted"
_FIELDS_STATIC = utils.FieldSet()
_FIELDS_DYNAMIC = utils.FieldSet("name", "valid", "node_status", "variants",
- "parameters", "api_versions")
+ "parameters", "api_versions", _HID, _BLK)
def CheckArguments(self):
if self.op.names:
@@ -3141,6 +3143,7 @@ class LUDiagnoseOS(NoHooksLU):
node_data = self.rpc.call_os_diagnose(valid_nodes)
pol = self._DiagnoseByOS(node_data)
output = []
+ cluster = self.cfg.GetClusterInfo()
for os_name, os_data in pol.items():
row = []
@@ -3161,6 +3164,12 @@ class LUDiagnoseOS(NoHooksLU):
params.intersection_update(node_params)
api_versions.intersection_update(node_api)
+ is_hid = os_name in cluster.hidden_oss
+ is_blk = os_name in cluster.blacklisted_oss
+ if ((self._HID not in self.op.output_fields and is_hid) or
+ (self._BLK not in self.op.output_fields and is_blk)):
+ continue
+
for field in self.op.output_fields:
if field == "name":
val = os_name
@@ -3177,6 +3186,10 @@ class LUDiagnoseOS(NoHooksLU):
val = list(params)
elif field == "api_versions":
val = list(api_versions)
+ elif field == self._HID:
+ val = is_hid
+ elif field == self._BLK:
+ val = is_blk
else:
raise errors.ParameterError(field)
row.append(val)
diff --git a/man/gnt-os.sgml b/man/gnt-os.sgml
index 7cf9d4d84d7dd8daa2b8b07cbeb2b2f366f7abd6..d4b698b7432c546d36f566456a32f9369bdc7fc1 100644
--- a/man/gnt-os.sgml
+++ b/man/gnt-os.sgml
@@ -2,7 +2,7 @@
<!-- Fill in your name for FIRSTNAME and SURNAME. -->
<!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>June 08, 2010</date>">
+ <!ENTITY dhdate "<date>September 20, 2010</date>">
<!-- SECTION should be 1-8, maybe w/ subsection other parameters are
allowed: see man(7), man(1). -->
<!ENTITY dhsection "<manvolnum>8</manvolnum>">
@@ -69,6 +69,11 @@
as an option.
</para>
+ <para>
+ Note that hidden or blacklisted OSes are not displayed by this
+ command, use <command>diagnose</command> for showing those.
+ </para>
+
<cmdsynopsis>
<command>diagnose</command>
</cmdsynopsis>
diff --git a/scripts/gnt-os b/scripts/gnt-os
index 4fac7375a3a342ee9a09763507d6f0f1284af143..6c419bd6cb6ae8283b0b3bac323d3b56c1c6b059 100755
--- a/scripts/gnt-os
+++ b/scripts/gnt-os
@@ -82,7 +82,8 @@ def ShowOSInfo(opts, args):
"""
op = opcodes.OpDiagnoseOS(output_fields=["name", "valid", "variants",
- "parameters", "api_versions"],
+ "parameters", "api_versions",
+ "blacklisted", "hidden"],
names=[])
result = SubmitOpCode(op, opts=opts)
@@ -92,7 +93,7 @@ def ShowOSInfo(opts, args):
do_filter = bool(args)
- for (name, valid, variants, parameters, api_versions) in result:
+ for (name, valid, variants, parameters, api_versions, blk, hid) in result:
if do_filter:
if name not in args:
continue
@@ -100,6 +101,8 @@ def ShowOSInfo(opts, args):
args.remove(name)
ToStdout("%s:", name)
ToStdout(" - valid: %s", valid)
+ ToStdout(" - hidden: %s", hid)
+ ToStdout(" - blacklisted: %s", blk)
if valid:
ToStdout(" - API versions:")
for version in sorted(api_versions):
@@ -148,7 +151,8 @@ def DiagnoseOS(opts, args):
"""
op = opcodes.OpDiagnoseOS(output_fields=["name", "valid", "variants",
- "node_status"], names=[])
+ "node_status", "hidden",
+ "blacklisted"], names=[])
result = SubmitOpCode(op, opts=opts)
if not result:
@@ -157,7 +161,7 @@ def DiagnoseOS(opts, args):
has_bad = False
- for os_name, _, os_variants, node_data in result:
+ for os_name, _, os_variants, node_data, hid, blk in result:
nodes_valid = {}
nodes_bad = {}
nodes_hidden = {}
@@ -173,6 +177,7 @@ def DiagnoseOS(opts, args):
else:
max_os_api = 0
fo_msg += " [no API versions declared]"
+
if max_os_api >= constants.OS_API_V15:
if fo_variants:
fo_msg += " [variants: %s]" % utils.CommaJoin(fo_variants)
@@ -210,7 +215,12 @@ def DiagnoseOS(opts, args):
for msg in nodes_hidden[node_name]:
ToStdout(msg)
- ToStdout("OS: %s [global status: %s]", os_name, status)
+ st_msg = "OS: %s [global status: %s]" % (os_name, status)
+ if hid:
+ st_msg += " [hidden]"
+ if blk:
+ st_msg += " [blacklisted]"
+ ToStdout(st_msg)
if os_variants:
ToStdout(" Variants: [%s]" % utils.CommaJoin(os_variants))
_OutputPerNodeOSStatus(nodes_valid)