Add support to cfg for disabling interspersed args
Add support to cfg for disabling interspersed args

Implements blueprint cfg-disable-interspersed-args

Nova currently relies on cfg being implemented with optparse because it
uses optparse's disable_interspersed_args()

The use case for this is if you do:

  $> nova-manage --verbose create --project foo --user bar

you want invoking ConfigOpts() to return:

  ['create', '--project', 'foo', '--user', 'bar']

as the "extra" args rather than aborting when it doesn't recognize the
--project arg.

This is a reasonable use case for cfg to support and it should just have
{disable,enable}_interspersed_args() methods.

If we ever switch from optparse to argparse, we'll do something like this:

  parser.add_argument('--verbose')
  ...
  parser.add_argument(
    'extra_args',
    nargs=argparse.REMAINDER if disable_interspersed_args else '*')
  ...
  ns = parser.parse_args(...)
  extra_args = ns.extra_args

i.e. we will need an 'extra_args' multi-value positional argument in any
case and we'll just pass nargs=REMAINDER if we want trailing options to
be included in the extra args.

Change-Id: I3ecb7dc18230327cf5aaaa7d832224e64aafa40c

openstack-dev/pbr,WiFast/pbr,citrix-openstack-build/pbr,openstack-dev/pbr,varunarya10/pbr,citrix-openstack-build/pbr,redhat-openstack/pbr,citrix-openstack-build/pbr,redhat-openstack/pbr,klmitch/pbr,JioCloud/pbr,WiFast/pbr,emonty/oslo-packaging,varunarya10/pbr,openstack-dev/pbr,klmitch/pbr,JioCloud/pbr,emonty/oslo-packaging