+def ShowOSInfo(opts, args):
+ """List detailed information about OSes in the cluster.
+
+ @param opts: the command line options selected by the user
+ @type args: list
+ @param args: should be an empty list
+ @rtype: int
+ @return: the desired exit code
+
+ """
+ op = opcodes.OpDiagnoseOS(output_fields=["name", "valid", "variants",
+ "parameters", "api_versions",
+ "blacklisted", "hidden"],
+ names=[])
+ result = SubmitOpCode(op, opts=opts)
+
+ if not result:
+ ToStderr("Can't get the OS list")
+ return 1
+
+ do_filter = bool(args)
+
+ for (name, valid, variants, parameters, api_versions, blk, hid) in result:
+ if do_filter:
+ if name not in args:
+ continue
+ else:
+ 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):
+ ToStdout(" - %s", version)
+ ToStdout(" - variants:")
+ for vname in variants:
+ ToStdout(" - %s", vname)
+ ToStdout(" - parameters:")
+ for pname, pdesc in parameters:
+ ToStdout(" - %s: %s", pname, pdesc)
+ ToStdout("")
+
+ if args:
+ for name in args:
+ ToStdout("%s: ", name)
+ ToStdout("")
+
+ return 0
+
+