summaryrefslogtreecommitdiffstats
path: root/extras/cliutils/cliutils.py
diff options
context:
space:
mode:
Diffstat (limited to 'extras/cliutils/cliutils.py')
-rw-r--r--extras/cliutils/cliutils.py33
1 files changed, 29 insertions, 4 deletions
diff --git a/extras/cliutils/cliutils.py b/extras/cliutils/cliutils.py
index 4e035d7ff5c..55fbaf56704 100644
--- a/extras/cliutils/cliutils.py
+++ b/extras/cliutils/cliutils.py
@@ -16,10 +16,18 @@ subparsers = parser.add_subparsers(dest="mode")
subcommands = {}
cache_data = {}
ParseError = etree.ParseError if hasattr(etree, 'ParseError') else SyntaxError
+_common_args_func = lambda p: True
class GlusterCmdException(Exception):
- pass
+ def __init__(self, message):
+ self.message = message
+ try:
+ # Python 3
+ super().__init__(message)
+ except TypeError:
+ # Python 2
+ super(GlusterCmdException, self).__init__(message)
def get_node_uuid():
@@ -50,9 +58,9 @@ def oknotok(flag):
return "OK" if flag else "NOT OK"
-def output_error(message):
+def output_error(message, errcode=1):
print (message, file=sys.stderr)
- sys.exit(1)
+ sys.exit(errcode)
def node_output_ok(message=""):
@@ -70,7 +78,8 @@ def node_output_notok(message):
def execute(cmd):
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ universal_newlines=True)
out, err = p.communicate()
return p.returncode, out, err
@@ -186,6 +195,7 @@ def runcli():
# a subcommand as specified in the Class name. Call the args
# method by passing subcommand parser, Derived class can add
# arguments to the subcommand parser.
+ metavar_data = []
for c in Cmd.__subclasses__():
cls = c()
if getattr(cls, "name", "") == "":
@@ -193,14 +203,24 @@ def runcli():
"to \"{0}\"".format(
cls.__class__.__name__))
+ # Do not show in help message if subcommand starts with node-
+ if not cls.name.startswith("node-"):
+ metavar_data.append(cls.name)
+
p = subparsers.add_parser(cls.name)
args_func = getattr(cls, "args", None)
if args_func is not None:
args_func(p)
+ # Apply common args if any
+ _common_args_func(p)
+
# A dict to save subcommands, key is name of the subcommand
subcommands[cls.name] = cls
+ # Hide node commands in Help message
+ subparsers.metavar = "{" + ",".join(metavar_data) + "}"
+
# Get all parsed arguments
args = parser.parse_args()
@@ -210,3 +230,8 @@ def runcli():
# Run
if cls is not None:
cls.run(args)
+
+
+def set_common_args_func(func):
+ global _common_args_func
+ _common_args_func = func