diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 1cc2822048b9a5b79e5d25e4c95a80bfc4308b2e..e9fea3187b898773e6dd6ddcdb96b708ab95d5f1 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -105,7 +105,8 @@ class R_2_os(baserlib.R_Generic): """ cl = baserlib.GetClient() - op = opcodes.OpDiagnoseOS(output_fields=["name", "valid"], names=[]) + op = opcodes.OpDiagnoseOS(output_fields=["name", "valid", "variants"], + names=[]) job_id = baserlib.SubmitJob([op], cl) # we use custom feedback function, instead of print we log the status result = cli.PollJob(job_id, cl, feedback_fn=baserlib.FeedbackFn) @@ -114,7 +115,12 @@ class R_2_os(baserlib.R_Generic): if not isinstance(diagnose_data, list): raise http.HttpBadGateway(message="Can't get OS list") - return [row[0] for row in diagnose_data if row[1]] + os_names = [] + for (name, valid, variants) in diagnose_data: + if valid: + os_names.extend(cli.CalculateOSNames(name, variants)) + + return os_names class R_2_redist_config(baserlib.R_Generic): diff --git a/scripts/gnt-instance b/scripts/gnt-instance index 59b1ba85a752727a459251f1a8267fda1d5cdda5..062e02bbbe1e0e8af5bb73af1c9e4642b80c7be4 100755 --- a/scripts/gnt-instance +++ b/scripts/gnt-instance @@ -481,7 +481,8 @@ def ReinstallInstance(opts, args): # second, if requested, ask for an OS if opts.select_os is True: - op = opcodes.OpDiagnoseOS(output_fields=["name", "valid"], names=[]) + op = opcodes.OpDiagnoseOS(output_fields=["name", "valid", "variants"], + names=[]) result = SubmitOpCode(op) if not result: @@ -491,10 +492,12 @@ def ReinstallInstance(opts, args): ToStdout("Available OS templates:") number = 0 choices = [] - for entry in result: - ToStdout("%3s: %s", number, entry[0]) - choices.append(("%s" % number, entry[0], entry[0])) - number = number + 1 + for (name, valid, variants) in result: + if valid: + for entry in CalculateOSNames(name, variants): + ToStdout("%3s: %s", number, entry) + choices.append(("%s" % number, entry, entry)) + number += 1 choices.append(('x', 'exit', 'Exit gnt-instance reinstall')) selected = AskUser("Enter OS template number (or x to abort):", diff --git a/scripts/gnt-os b/scripts/gnt-os index 0542a67344b868a9980a3ea5b1b9e0e061249386..e5b0fed2e3f2c072a19cf973e679a8d2075ea745 100755 --- a/scripts/gnt-os +++ b/scripts/gnt-os @@ -41,7 +41,8 @@ def ListOS(opts, args): @return: the desired exit code """ - op = opcodes.OpDiagnoseOS(output_fields=["name", "valid"], names=[]) + op = opcodes.OpDiagnoseOS(output_fields=["name", "valid", "variants"], + names=[]) result = SubmitOpCode(op) if not result: @@ -53,9 +54,13 @@ def ListOS(opts, args): else: headers = None + os_names = [] + for (name, valid, variants) in result: + if valid: + os_names.extend([[n] for n in CalculateOSNames(name, variants)]) + data = GenerateTable(separator=None, headers=headers, fields=["name"], - data=[[row[0]] for row in result if row[1]], - units=None) + data=os_names, units=None) for line in data: ToStdout(line) diff --git a/tools/burnin b/tools/burnin index 35848c45f49699407df120894c9a872410dc0d8e..7796785e70fe720e1bc4144d6b517a58254d2f50 100755 --- a/tools/burnin +++ b/tools/burnin @@ -447,16 +447,20 @@ class Burner(object): Err(msg, exit_code=err_code) self.nodes = [data[0] for data in result if not (data[1] or data[2])] - op_diagos = opcodes.OpDiagnoseOS(output_fields=["name", "valid"], names=[]) - result = self.ExecOp(True, op_diagos) + op_diagnose = opcodes.OpDiagnoseOS(output_fields=["name", "valid", + "variants"], names=[]) + result = self.ExecOp(True, op_diagnose) if not result: Err("Can't get the OS list") - # filter non-valid OS-es - os_set = [val[0] for val in result if val[1]] + found = False + for (name, valid, variants) in result: + if valid and self.opts.os in cli.CalculateOSNames(name, variants): + found = True + break - if self.opts.os not in os_set: + if not found: Err("OS '%s' not found" % self.opts.os) @_DoCheckInstances