iLO-manager first main commitgit status

This commit is contained in:
Jiří Stach committed 2026-02-03 15:56:53 +01:00
1 parent e6f4cc04ca
commit 599d8da562
3271 files changed
+550655

No files matched your search

@@ -0,0 +1,203 @@
###
# Copyright 2016-2021 Hewlett Packard Enterprise, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###
# -*- coding: utf-8 -*-
"""Status Command for RDMC"""
from functools import reduce
from redfish.ris.utils import merge_dict
try:
from rdmc_helper import InvalidCommandLineErrorOPTS, ReturnCodes
except ImportError:
from ilorest.rdmc_helper import InvalidCommandLineErrorOPTS, ReturnCodes
class StatusCommand:
"""Constructor"""
def __init__(self):
self.ident = {
"name": "status",
"usage": None,
"description": "Run to display all pending changes within"
" the currently\n\tselected type that need to be"
" committed\n\texample: status",
"summary": "Displays all pending changes within a selected type" " that need to be committed.",
"aliases": [],
"auxcommands": ["SelectCommand"],
}
self.cmdbase = None
self.rdmc = None
self.auxcommands = dict()
def run(self, line, help_disp=False):
"""Main status worker function
:param line: command line input
:type line: string.
"""
if help_disp:
self.parser.print_help()
return ReturnCodes.SUCCESS
try:
(options, _) = self.rdmc.rdmc_parse_arglist(self, line)
except (InvalidCommandLineErrorOPTS, SystemExit):
if ("-h" in line) or ("--help" in line):
return ReturnCodes.SUCCESS
else:
raise InvalidCommandLineErrorOPTS("")
self.statusvalidation(options)
contents = self.rdmc.app.status()
selector = self.rdmc.app.selector
if contents and options.json:
self.jsonout(contents)
elif contents:
self.outputpatches(contents, selector)
else:
self.rdmc.ui.printer("No changes found\n")
# Return code
return ReturnCodes.SUCCESS
def jsonout(self, contents):
"""Helper function to print json output of patches
:param contents: contents for the selection
:type contents: string.
"""
self.rdmc.ui.printer("Current changes found:\n")
createdict = lambda y, x: {x: y}
totdict = {}
for item in contents:
for keypath, value in item.items():
path = keypath.split("(")[1].strip("()")
cont = {}
totdict[path] = cont
for content in value:
val = (
["List Manipulation"]
if content["op"] == "move"
else [content["value"].strip("\"'")] if len(content["value"]) else [""]
)
cont = reduce(
createdict,
reversed([path] + content["path"].strip("/").split("/") + val),
)
merge_dict(totdict, cont)
self.rdmc.ui.print_out_json(totdict)
def outputpatches(self, contents, selector):
"""Helper function for status for use in patches
:param contents: contents for the selection
:type contents: string.
:param selector: type selected
:type selector: string.
"""
self.rdmc.ui.printer("Current changes found:\n")
for item in contents:
moveoperation = ""
for key, value in item.items():
if selector and key.lower().startswith(selector.lower()):
self.rdmc.ui.printer("%s (Currently selected)\n" % key)
else:
self.rdmc.ui.printer("%s\n" % key)
for content in value:
try:
if content["op"] == "move":
moveoperation = "/".join(content["path"].split("/")[1:-1])
continue
except:
if content[0]["op"] == "move":
moveoperation = "/".join(content[0]["path"].split("/")[1:-1])
continue
try:
if isinstance(content[0]["value"], int):
self.rdmc.ui.printer("\t%s=%s" % (content[0]["path"][1:], content[0]["value"]))
elif not isinstance(content[0]["value"], bool) and not len(content[0]["value"]) == 0:
if content[0]["value"][0] == '"' and content[0]["value"][-1] == '"':
self.rdmc.ui.printer(
"\t%s=%s"
% (
content[0]["path"][1:],
content[0]["value"][1:-1],
)
)
else:
self.rdmc.ui.printer("\t%s=%s" % (content[0]["path"][1:], content[0]["value"]))
else:
output = content[0]["value"]
if not isinstance(output, bool):
if len(output) == 0:
output = '""'
self.rdmc.ui.printer("\t%s=%s" % (content[0]["path"][1:], output))
except:
if isinstance(content["value"], int):
self.rdmc.ui.printer("\t%s=%s" % (content["path"][1:], content["value"]))
elif (
content["value"]
and not isinstance(content["value"], bool)
and not len(content["value"]) == 0
):
if content["value"][0] == '"' and content["value"][-1] == '"':
self.rdmc.ui.printer("\t%s=%s" % (content["path"][1:], content["value"]))
else:
self.rdmc.ui.printer("\t%s=%s" % (content["path"][1:], content["value"]))
else:
output = content["value"]
if output and not isinstance(output, bool):
if len(output) == 0:
output = '""'
self.rdmc.ui.printer("\t%s=%s" % (content["path"][1:], output))
self.rdmc.ui.printer("\n")
if moveoperation:
self.rdmc.ui.printer("\t%s=List Manipulation\n" % moveoperation)
def statusvalidation(self, options):
"""Status method validation function"""
self.cmdbase.login_select_validation(self, options)
def definearguments(self, customparser):
"""Wrapper function for new command main function
:param customparser: command line input
:type customparser: parser.
"""
if not customparser:
return
self.cmdbase.add_login_arguments_group(customparser)
customparser.add_argument(
"-j",
"--json",
dest="json",
action="store_true",
help="Optionally include this flag if you wish to change the"
" displayed output to JSON format. Preserving the JSON data"
" structure makes the information easier to parse.",
default=False,
)