Currently,
# ceph orch ls -h
...
orch ls [<service_type>] [<service_name>] [--export] [-- List services known to orchestrator
format {plain|json|json-pretty|yaml}] [--refresh]
# ceph orch ls osd -h
... nothing ...
because the CLI is provided more arguments than the command prefix. Make
-h drop right-hand args until we get at least one prefix match. This
means we can have a partial command written with some args and add -h to
get a usage for that command.
Signed-off-by: Sage Weil <sage@newdream.net>
{
# print help message
ceph --help mon
+ # -h works even when some arguments are passed
+ ceph osd dump -h | grep 'osd dump'
+ ceph osd dump 123 -h | grep 'osd dump'
# no mon add/remove
ceph mon dump
ceph mon getmap -o $TEMP_DIR/monmap.$$
def do_extended_help(parser, args, target, partial) -> int:
def help_for_sigs(sigs, partial=None):
try:
- sys.stdout.write(format_help(parse_json_funcsigs(sigs, 'cli'),
- partial=partial))
+ while True:
+ out = format_help(parse_json_funcsigs(sigs, 'cli'),
+ partial=partial)
+ if not out and partial:
+ # shorten partial until we get at least one matching command prefix
+ partial = ' '.join(partial.split()[:-1])
+ continue
+ sys.stdout.write(out)
+ break
except BrokenPipeError:
pass