mirror of
https://github.com/apache/cloudstack
synced 2026-08-02 05:26:35 +00:00
cli: fix cloudmonkey's pipe-ability
Signed-off-by: Rohit Yadav <bhaisaab@apache.org>
This commit is contained in:
parent
71257d6bb4
commit
6f90a86b13
@ -75,7 +75,8 @@ class CloudMonkeyShell(cmd.Cmd, object):
|
||||
# datastructure {'verb': {cmd': ['api', [params], doc, required=[]]}}
|
||||
cache_verbs = precached_verbs
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, pname):
|
||||
self.program_name = pname
|
||||
if os.path.exists(self.config_file):
|
||||
config = self.read_config()
|
||||
else:
|
||||
@ -307,7 +308,19 @@ class CloudMonkeyShell(cmd.Cmd, object):
|
||||
return None
|
||||
return api_mod
|
||||
|
||||
def pipe_runner(self, args):
|
||||
if args.find(' |') > -1:
|
||||
pname = self.program_name
|
||||
if '.py' in pname:
|
||||
pname = "python " + pname
|
||||
self.do_shell("%s %s" % (pname, args))
|
||||
return True
|
||||
return False
|
||||
|
||||
def default(self, args):
|
||||
if self.pipe_runner(args):
|
||||
return
|
||||
|
||||
lexp = shlex.shlex(args.strip())
|
||||
lexp.whitespace = " "
|
||||
lexp.whitespace_split = True
|
||||
@ -506,22 +519,21 @@ def main():
|
||||
for rule in grammar:
|
||||
def add_grammar(rule):
|
||||
def grammar_closure(self, args):
|
||||
if '|' in args: # FIXME: Consider parsing issues
|
||||
prog_name = sys.argv[0]
|
||||
if '.py' in prog_name:
|
||||
prog_name = "python " + prog_name
|
||||
self.do_shell("%s %s %s" % (prog_name, rule, args))
|
||||
if self.pipe_runner("%s %s" % (rule, args)):
|
||||
return
|
||||
try:
|
||||
args_partition = args.partition(" ")
|
||||
res = self.cache_verbs[rule][args_partition[0]]
|
||||
cmd = res[0]
|
||||
helpdoc = res[2]
|
||||
args = args_partition[2]
|
||||
except KeyError, e:
|
||||
self.print_shell("Error: invalid %s api arg" % rule, e)
|
||||
return
|
||||
if ' --help' in args or ' -h' in args:
|
||||
self.print_shell(res[2])
|
||||
self.print_shell(helpdoc)
|
||||
return
|
||||
self.default(res[0] + " " + args_partition[2])
|
||||
self.default("%s %s" % (cmd, args))
|
||||
return grammar_closure
|
||||
|
||||
grammar_handler = add_grammar(rule)
|
||||
@ -529,7 +541,7 @@ def main():
|
||||
grammar_handler.__name__ = 'do_' + rule
|
||||
setattr(self, grammar_handler.__name__, grammar_handler)
|
||||
|
||||
shell = CloudMonkeyShell()
|
||||
shell = CloudMonkeyShell(sys.argv[0])
|
||||
if len(sys.argv) > 1:
|
||||
shell.onecmd(' '.join(sys.argv[1:]))
|
||||
else:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user