rados.py: allow long-form names of 'warn' and 'err' as watch levels

Signed-off-by: Dan Mick <dan.mick@inktank.com>
AuthMonitor, KeyRing: add Formatter-dumps of auth info

Signed-off-by: Dan Mick <dan.mick@inktank.com>
AuthMonitor: early out on bad entity name

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph_argparse.py: clean up some questionable code

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph_argparse.py: validate(): better comment, check for unparsed args

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph.in: Move descsort to ceph_argparse.py

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph_argparse.py: CephObjectname didn't need a non-default valid()

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph_argparse.py: change valid() conventions, accept tuple/list args

valid() used to either return False or raise an exception on various
sorts of invalid behavior; this was confusing and unnecessary.  Make
it simply raise exceptions, and adjust callers to cope.

Also, allow validate_one() to accept either a simple string argument
or a tuple/list argument representing "name=val" (for REST API support).
Invalid conditions now include name mismatch with name of arg in
descriptor.  If no value is given, assume value is the same as name.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Add first cut of REST API daemon/config file.

To run: python ./api; starts HTTP server on port 0.0.0.0:5000

Signed-off-by: Dan Mick <dan.mick@inktank.com>
api: allow configuration of listen addr and port

Signed-off-by: Dan Mick <dan.mick@inktank.com>