]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Use oslo-config-2013.1b3
authorMark McLoughlin <markmc@redhat.com>
Mon, 11 Feb 2013 00:00:19 +0000 (19:00 -0500)
committerMark McLoughlin <markmc@redhat.com>
Sun, 17 Feb 2013 17:33:05 +0000 (17:33 +0000)
The cfg API is now available via the oslo-config library, so switch to
it and remove the copied-and-pasted version.

Add the 2013.1b3 tarball to tools/pip-requires - this will be changed
to 'oslo-config>=2013.1' when oslo-config is published to pypi. This
will happen in time for grizzly final.

Remove the 'deps = pep8' from tox.ini as it means all the other deps
get installed with easy_install which can't install oslo-config from
the URL.

Retain dummy cfg.py file until keystoneclient middleware has been
updated (I18c450174277c8e2d15ed93879da6cd92074c27a).

Change-Id: I4815aeb8a9341a31a250e920157f15ee15cfc5bc

115 files changed:
bin/quantum-usage-audit
openstack-common.conf
quantum/agent/common/config.py
quantum/agent/dhcp_agent.py
quantum/agent/l3_agent.py
quantum/agent/linux/dhcp.py
quantum/agent/linux/external_process.py
quantum/agent/linux/interface.py
quantum/agent/linux/iptables_firewall.py
quantum/agent/linux/iptables_manager.py
quantum/agent/metadata/agent.py
quantum/agent/metadata/namespace_proxy.py
quantum/agent/netns_cleanup_util.py
quantum/agent/ovs_cleanup_util.py
quantum/agent/securitygroups_rpc.py
quantum/api/extensions.py
quantum/api/v2/router.py
quantum/auth.py
quantum/common/config.py
quantum/common/utils.py
quantum/db/api.py
quantum/db/db_base_plugin_v2.py
quantum/db/loadbalancer/loadbalancer_db.py
quantum/db/migration/cli.py
quantum/db/securitygroups_db.py
quantum/db/servicetype_db.py
quantum/debug/debug_agent.py
quantum/debug/shell.py
quantum/extensions/l3.py
quantum/extensions/quotasv2.py
quantum/extensions/securitygroup.py
quantum/manager.py
quantum/openstack/common/cfg.py
quantum/openstack/common/eventlet_backdoor.py
quantum/openstack/common/iniparser.py [deleted file]
quantum/openstack/common/lockutils.py
quantum/openstack/common/log.py
quantum/openstack/common/notifier/api.py
quantum/openstack/common/notifier/log_notifier.py
quantum/openstack/common/notifier/rpc_notifier.py
quantum/openstack/common/notifier/rpc_notifier2.py
quantum/openstack/common/rpc/__init__.py
quantum/openstack/common/rpc/common.py
quantum/openstack/common/rpc/impl_kombu.py
quantum/openstack/common/rpc/impl_qpid.py
quantum/openstack/common/rpc/impl_zmq.py
quantum/openstack/common/rpc/matchmaker.py
quantum/openstack/common/service.py
quantum/plugins/bigswitch/plugin.py
quantum/plugins/brocade/QuantumPlugin.py
quantum/plugins/cisco/tests/unit/v2/test_api_v2.py
quantum/plugins/hyperv/agent/hyperv_quantum_agent.py
quantum/plugins/hyperv/agent/utils.py
quantum/plugins/hyperv/hyperv_quantum_plugin.py
quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py
quantum/plugins/linuxbridge/common/config.py
quantum/plugins/linuxbridge/lb_quantum_plugin.py
quantum/plugins/metaplugin/common/config.py
quantum/plugins/metaplugin/meta_quantum_plugin.py
quantum/plugins/metaplugin/proxy_quantum_plugin.py
quantum/plugins/nec/common/config.py
quantum/plugins/nec/extensions/packetfilter.py
quantum/plugins/nicira/nicira_nvp_plugin/QuantumPlugin.py
quantum/plugins/nicira/nicira_nvp_plugin/common/config.py
quantum/plugins/openvswitch/agent/ovs_quantum_agent.py
quantum/plugins/openvswitch/common/config.py
quantum/plugins/openvswitch/ovs_db_v2.py
quantum/plugins/openvswitch/ovs_quantum_plugin.py
quantum/plugins/plumgrid/plumgrid_nos_plugin/plumgrid_plugin.py
quantum/plugins/ryu/agent/ryu_quantum_agent.py
quantum/plugins/ryu/common/config.py
quantum/plugins/ryu/ryu_quantum_plugin.py
quantum/policy.py
quantum/quota.py
quantum/server/__init__.py
quantum/service.py
quantum/tests/unit/__init__.py
quantum/tests/unit/_test_extension_portbindings.py
quantum/tests/unit/bigswitch/test_router_db.py
quantum/tests/unit/db/loadbalancer/test_db_loadbalancer.py
quantum/tests/unit/hyperv/test_hyperv_quantum_agent.py
quantum/tests/unit/hyperv/test_hyperv_quantum_plugin.py
quantum/tests/unit/linuxbridge/test_defaults.py
quantum/tests/unit/linuxbridge/test_lb_quantum_agent.py
quantum/tests/unit/metaplugin/test_metaplugin.py
quantum/tests/unit/nicira/test_defaults.py
quantum/tests/unit/nicira/test_nicira_plugin.py
quantum/tests/unit/openvswitch/test_ovs_defaults.py
quantum/tests/unit/openvswitch/test_ovs_quantum_agent.py
quantum/tests/unit/openvswitch/test_ovs_tunnel.py
quantum/tests/unit/ryu/test_defaults.py
quantum/tests/unit/ryu/test_ryu_db.py
quantum/tests/unit/test_agent_netns_cleanup.py
quantum/tests/unit/test_agent_ovs_cleanup.py
quantum/tests/unit/test_agent_rpc.py
quantum/tests/unit/test_api_v2.py
quantum/tests/unit/test_config.py
quantum/tests/unit/test_db.py
quantum/tests/unit/test_db_plugin.py
quantum/tests/unit/test_debug_commands.py
quantum/tests/unit/test_dhcp_agent.py
quantum/tests/unit/test_extension_extended_attribute.py
quantum/tests/unit/test_extension_security_group.py
quantum/tests/unit/test_l3_agent.py
quantum/tests/unit/test_l3_plugin.py
quantum/tests/unit/test_linux_dhcp.py
quantum/tests/unit/test_linux_interface.py
quantum/tests/unit/test_loadbalancer_plugin.py
quantum/tests/unit/test_quantum_manager.py
quantum/tests/unit/test_quota_per_tenant_ext.py
quantum/tests/unit/test_security_groups_rpc.py
quantum/tests/unit/test_servicetype.py
tools/install_venv_common.py
tools/pip-requires
tox.ini

index 1d121f0668b17119b647f9e1d059a8796fa9ee52..fd841e77cf1381dc67f86c767ec0fb78a5ebd781 100755 (executable)
@@ -21,10 +21,11 @@ subnets.
 
 """
 
+from oslo.config import cfg
+
 from quantum import context
 from quantum import manager
 from quantum.common import config
-from quantum.openstack.common import cfg
 from quantum.openstack.common.notifier import api as notifier_api
 
 if __name__ == '__main__':
index 0d738376ed5862135b993d44dadea5a910490cd6..91eea907b741819c4477025c897934325595ac5b 100644 (file)
@@ -1,5 +1,5 @@
 [DEFAULT]
 # The list of modules to copy from openstack-common
-modules=cfg,context,eventlet_backdoor,exception,excutils,fileutils,gettextutils,importutils,iniparser,install_venv_common,jsonutils,local,lockutils,log,loopingcall,network_utils,notifier,periodic_task,policy,processutils,rpc,service,setup,threadgroup,timeutils,uuidutils,version
+modules=context,eventlet_backdoor,exception,excutils,fileutils,gettextutils,importutils,install_venv_common,jsonutils,local,lockutils,log,loopingcall,network_utils,notifier,periodic_task,policy,processutils,rpc,service,setup,threadgroup,timeutils,uuidutils,version
 # The base module to hold the copy of openstack.common
 base=quantum
index f9b8eb147269586e7c5f58849e6d4dc06e22c182..1b117802663565411d8cf81b16e3c48102004114 100644 (file)
@@ -15,9 +15,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from oslo.config import cfg
 
 from quantum.common import config
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 
 
index 0167e55e7e1649ddd8a68268c8ab7eb02aaaba28..463bec563ac329b25ba1b3a8eb3e100fe85fd10a 100644 (file)
@@ -21,6 +21,7 @@ import uuid
 
 import eventlet
 import netaddr
+from oslo.config import cfg
 
 from quantum.agent.common import config
 from quantum.agent.linux import dhcp
@@ -31,7 +32,6 @@ from quantum.agent import rpc as agent_rpc
 from quantum.common import exceptions
 from quantum.common import topics
 from quantum import context
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum.openstack.common import jsonutils
 from quantum.openstack.common import log as logging
index 129efcb942ce8409bfaa235e86d43831d1e1cbb5..f5730fde4ee5c210fce7c7b373e916c8e7a4f075 100644 (file)
@@ -24,6 +24,7 @@ import sys
 import eventlet
 from eventlet import semaphore
 import netaddr
+from oslo.config import cfg
 
 from quantum.agent.common import config
 from quantum.agent.linux import external_process
@@ -35,7 +36,6 @@ from quantum.common import constants as l3_constants
 from quantum.common import topics
 from quantum import context
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import periodic_task
index 7d9c4b02a9d31ea1385bc8bba04020c7ed8ef2b8..0c05fcaabb71e6110704614a69583cd84f75cd53 100644 (file)
@@ -24,10 +24,10 @@ import sys
 import tempfile
 
 import netaddr
+from oslo.config import cfg
 
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import utils
-from quantum.openstack.common import cfg
 from quantum.openstack.common import jsonutils
 from quantum.openstack.common import log as logging
 
index f0a59d475817d9993b6675b5c445f554c09c524d..874aba16159c212852dc007f46d691623272814b 100644 (file)
 
 import os
 
+from oslo.config import cfg
+
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import utils
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 
 LOG = logging.getLogger(__name__)
index e32e375e58a11ab1ea14485ab792d25b378ec82e..21a251a0d0a3a14461c7105bc48ca6c822c7237b 100644 (file)
@@ -18,6 +18,7 @@
 import abc
 
 import netaddr
+from oslo.config import cfg
 
 from quantum.agent.common import config
 from quantum.agent.linux import ip_lib
@@ -25,7 +26,6 @@ from quantum.agent.linux import ovs_lib
 from quantum.agent.linux import utils
 from quantum.common import exceptions
 from quantum.extensions.flavor import (FLAVOR_NETWORK)
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum.openstack.common import log as logging
 
index 057ee9685f86e9b725a6e2f77397b21e56180513..246fd87566f367f94435cedf590616ce81dc7a5d 100644 (file)
 #    under the License.
 
 import netaddr
+from oslo.config import cfg
 
 from quantum.agent import firewall
 from quantum.agent.linux import iptables_manager
 from quantum.common import constants
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 
 
index 67942bed7d3bd66c0a625267c3657ed5f262c0b7..8c63d8d68d71a8c4b4b6d24ba5aff6fcfd61d78d 100644 (file)
@@ -24,8 +24,9 @@
 import inspect
 import os
 
+from oslo.config import cfg
+
 from quantum.agent.linux import utils
-from quantum.openstack.common import cfg
 from quantum.openstack.common import lockutils
 from quantum.openstack.common import log as logging
 
index ec144f2065df42ace4f3f3ff3e9e6d6ee155e677..773f31a4c9700d988dff6f3650e98daf5f98099a 100644 (file)
@@ -24,11 +24,11 @@ import urlparse
 
 import eventlet
 import httplib2
+from oslo.config import cfg
 from quantumclient.v2_0 import client
 import webob
 
 from quantum.common import config
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum import wsgi
 
index d97bff0432a29eb2a6add263fd3cc18aea48042b..b2894645378c658187c1e1cef8cb498bcb89b215 100644 (file)
@@ -22,11 +22,11 @@ import urlparse
 
 import eventlet
 import httplib2
+from oslo.config import cfg
 import webob
 
 from quantum.agent.linux import daemon
 from quantum.common import config
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum import wsgi
 
index b3442c8db32356fdee853cec1455ac3a1d2e45eb..ea44ad461b15091980930700990da2314f1fdd79 100644 (file)
@@ -18,6 +18,7 @@
 import re
 
 import eventlet
+from oslo.config import cfg
 
 from quantum.agent import dhcp_agent
 from quantum.agent import l3_agent
@@ -27,7 +28,6 @@ from quantum.agent.linux import ip_lib
 from quantum.agent.linux import ovs_lib
 from quantum.api.v2 import attributes
 from quantum.common import config
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum.openstack.common import log as logging
 
index d9ee6459197d5b11a2b85a107ec7b22ffa2615c4..819bcab0900e8d979e68630d636f3489588545e8 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from oslo.config import cfg
+
 from quantum.agent import l3_agent
 from quantum.agent.common import config as agent_config
 from quantum.agent.linux import interface
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import ovs_lib
 from quantum.common import config
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 
 
index 01b4e110fea667bdb838c12c97be7f1da0718c9f..1b84c788ccfcf55eea26f8502e23ddc14dd9bbea 100644 (file)
@@ -16,8 +16,9 @@
 #    under the License.
 #
 
+from oslo.config import cfg
+
 from quantum.common import topics
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum.openstack.common import log as logging
 
index 3d9911186260bec180cf47636ff10af427eb75b9..1679ebfceae67e29bd45292ec64783aa3e32d277 100644 (file)
@@ -21,6 +21,7 @@ from abc import ABCMeta
 import imp
 import os
 
+from oslo.config import cfg
 import routes
 import webob.dec
 import webob.exc
@@ -30,7 +31,6 @@ from quantum.common import constants
 from quantum.common import exceptions
 import quantum.extensions
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum import wsgi
 
index 77e0070063b19d37d7048913ff353802a1e32a5e..dae677b28049f7cb565690e712d09f79da548aff 100644 (file)
@@ -15,6 +15,7 @@
 
 import urlparse
 
+from oslo.config import cfg
 import routes as routes_mapper
 import webob
 import webob.dec
@@ -24,7 +25,6 @@ from quantum.api import extensions
 from quantum.api.v2 import attributes
 from quantum.api.v2 import base
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum import wsgi
 
index 9146761f0f27a7634e0374d7cf0bef5f95327629..7279f279fb9f35322f270ac84327266b9bef1882 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from oslo.config import cfg
 import webob.dec
 import webob.exc
 
 from quantum import context
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum import wsgi
 
index 7fde3f9edcb2a877ab8df92c21e0ae4fd883f03c..a33f319e97ba54de9701e4cea600daa149274fd5 100644 (file)
@@ -21,11 +21,11 @@ Routines for configuring Quantum
 
 import os
 
+from oslo.config import cfg
 from paste import deploy
 
 from quantum.api.v2 import attributes
 from quantum.common import utils
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import rpc
 from quantum.version import version_info as quantum_version
index 76cdd1c92671539ae4e4aa6e62cd0f59531b80b3..da0e019153c4a5a04fa929e66cf43f22b92924df 100644 (file)
@@ -26,8 +26,8 @@ import signal
 import socket
 
 from eventlet.green import subprocess
+from oslo.config import cfg
 
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 
 
index 6dcd8f3b252b5a1d9764a6fc1d1fdf44bc404de4..d27a0c21c1f716d41be9284bed1956a7b7edca71 100644 (file)
@@ -25,6 +25,7 @@ try:
     import MySQLdb
 except ImportError:
     MySQLdb = None
+from oslo.config import cfg
 import sqlalchemy as sql
 from sqlalchemy import create_engine
 from sqlalchemy.exc import DisconnectionError
@@ -32,7 +33,6 @@ from sqlalchemy.interfaces import PoolListener
 from sqlalchemy.orm import sessionmaker
 
 from quantum.db import model_base
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 
 LOG = logging.getLogger(__name__)
index fb34bf835f6d06a1393751d4ba0cc78bcef095a3..f129cf0ac4449f3912b81a3382770a2c8a721a60 100644 (file)
@@ -19,6 +19,7 @@ import datetime
 import random
 
 import netaddr
+from oslo.config import cfg
 from sqlalchemy import orm
 from sqlalchemy.orm import exc
 
@@ -27,7 +28,6 @@ from quantum.common import constants
 from quantum.common import exceptions as q_exc
 from quantum.db import api as db
 from quantum.db import models_v2
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import timeutils
 from quantum.openstack.common import uuidutils
index 6259201c84b854db9510bbd586cf80af9f2f80f4..7a9ab82a00a803fb9638ebc1a539a0070873a7aa 100644 (file)
@@ -15,6 +15,7 @@
 #    under the License.
 #
 
+from oslo.config import cfg
 import sqlalchemy as sa
 from sqlalchemy import orm
 from sqlalchemy.orm import exc
@@ -28,7 +29,6 @@ from quantum.db import model_base
 from quantum.db import models_v2
 from quantum.extensions import loadbalancer
 from quantum.extensions.loadbalancer import LoadBalancerPluginBase
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import uuidutils
 from quantum.plugins.common import constants
index dc9ec181786f05ac8f4f7810e05111af6cd0e7df..25e0ce09f616bcc616b71c3af274298cb0404608 100644 (file)
@@ -22,9 +22,9 @@ import sys
 from alembic import command as alembic_command
 from alembic import config as alembic_config
 from alembic import util as alembic_util
+from oslo.config import cfg
 
 from quantum import manager
-from quantum.openstack.common import cfg
 
 _core_opts = [
     cfg.StrOpt('core_plugin',
index 7eba36cf53d722ef46bad7494bb71cab6baacb28..6468f11175d0b8bb544a171913f820aea38f9801 100644 (file)
@@ -16,6 +16,7 @@
 #
 # @author: Aaron Rosen, Nicira, Inc
 
+from oslo.config import cfg
 import sqlalchemy as sa
 from sqlalchemy import orm
 from sqlalchemy.orm import exc
@@ -25,7 +26,6 @@ from quantum.api.v2 import attributes as attr
 from quantum.db import model_base
 from quantum.db import models_v2
 from quantum.extensions import securitygroup as ext_sg
-from quantum.openstack.common import cfg
 from quantum.openstack.common import uuidutils
 
 
index 04318a3650fa8d61c274639972c5f4fa55a2657e..1f619bc874d934d576f9d9d2a23b02cb25671891 100644 (file)
@@ -17,6 +17,7 @@
 #    @author: Salvatore Orlando, VMware
 #
 
+from oslo.config import cfg
 import sqlalchemy as sa
 from sqlalchemy import orm
 from sqlalchemy.orm import exc as orm_exc
@@ -27,7 +28,6 @@ from quantum import context
 from quantum.db import api as db
 from quantum.db import model_base
 from quantum.db import models_v2
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum import policy
 
index de874f1d50ad0572c2d3b5974fade6e11cd5bedd..156eec416dab27799dcd439d486677addfc4c6ce 100644 (file)
@@ -19,12 +19,12 @@ import shlex
 import socket
 
 import netaddr
+from oslo.config import cfg
 
 from quantum.agent.common import config
 from quantum.agent.dhcp_agent import DictModel
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import utils
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 
 
index 327012554dbba7fbc21dd2675688a38956d58019..ed7f09fa065fd80b0cc6c4306a57494c00ced895 100644 (file)
 
 import sys
 
+from oslo.config import cfg
+
 from quantum.agent.common import config
 from quantum.agent.linux import interface
 from quantum.debug.debug_agent import QuantumDebugAgent
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantumclient.common import exceptions as exc
 from quantumclient.common import utils
index e3a1263d2551a4594e823e551a0f4d64e28d39eb..2b251f6017f6e7104db4eb4f9b2768e62540f6b0 100644 (file)
 
 from abc import abstractmethod
 
+from oslo.config import cfg
+
 from quantum.api import extensions
 from quantum.api.v2 import attributes as attr
 from quantum.api.v2 import base
 from quantum.common import exceptions as qexception
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum import quota
 
 
index d1e1cc605b30e697ea1fb6edc7c277216fcb828d..87015d39ba6f32a8669517d8875fcf818dc0096c 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from oslo.config import cfg
 import webob
 
 from quantum.api import extensions
 from quantum.api.v2 import base
 from quantum.common import exceptions
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum import quota
 from quantum import wsgi
index cd3ee9c18ca0738abac6a6b05668c9ace1262918..6c43ac48b8a3c7eb2e9c3ea37882484da1528bd8 100644 (file)
 
 from abc import abstractmethod
 
+from oslo.config import cfg
+
 from quantum.api import extensions
 from quantum.api.v2 import attributes as attr
 from quantum.api.v2 import base
 from quantum.common import exceptions as qexception
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import uuidutils
 from quantum import quota
 
index c9053c44ea21d2fd0ad205b44596fa0f1b546cc2..74057dc5f91c01669ee54c01c594d9edd302f73f 100644 (file)
@@ -16,8 +16,9 @@
 #    under the License.
 # @author: Somik Behera, Nicira Networks, Inc.
 
+from oslo.config import cfg
+
 from quantum.common.exceptions import ClassNotFound
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import periodic_task
index 9eaaf1ac32995ef1aafb593fbe51ad2951174015..c35dcb845e2227349deb36f707cac3ed3a95873b 100644 (file)
@@ -1,6 +1,6 @@
 # vim: tabstop=4 shiftwidth=4 softtabstop=4
 
-# Copyright 2012 Red Hat, Inc.
+# Copyright 2013 Red Hat, Inc.
 #
 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 #    not use this file except in compliance with the License. You may obtain
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-r"""
-Configuration options which may be set on the command line or in config files.
-
-The schema for each option is defined using the Opt sub-classes, e.g.:
-
-::
-
-    common_opts = [
-        cfg.StrOpt('bind_host',
-                   default='0.0.0.0',
-                   help='IP address to listen on'),
-        cfg.IntOpt('bind_port',
-                   default=9292,
-                   help='Port number to listen on')
-    ]
-
-Options can be strings, integers, floats, booleans, lists or 'multi strings'::
-
-    enabled_apis_opt = cfg.ListOpt('enabled_apis',
-                                   default=['ec2', 'osapi_compute'],
-                                   help='List of APIs to enable by default')
-
-    DEFAULT_EXTENSIONS = [
-        'nova.api.openstack.compute.contrib.standard_extensions'
-    ]
-    osapi_compute_extension_opt = cfg.MultiStrOpt('osapi_compute_extension',
-                                                  default=DEFAULT_EXTENSIONS)
-
-Option schemas are registered with the config manager at runtime, but before
-the option is referenced::
-
-    class ExtensionManager(object):
-
-        enabled_apis_opt = cfg.ListOpt(...)
-
-        def __init__(self, conf):
-            self.conf = conf
-            self.conf.register_opt(enabled_apis_opt)
-            ...
-
-        def _load_extensions(self):
-            for ext_factory in self.conf.osapi_compute_extension:
-                ....
-
-A common usage pattern is for each option schema to be defined in the module or
-class which uses the option::
-
-    opts = ...
-
-    def add_common_opts(conf):
-        conf.register_opts(opts)
-
-    def get_bind_host(conf):
-        return conf.bind_host
-
-    def get_bind_port(conf):
-        return conf.bind_port
-
-An option may optionally be made available via the command line. Such options
-must registered with the config manager before the command line is parsed (for
-the purposes of --help and CLI arg validation)::
-
-    cli_opts = [
-        cfg.BoolOpt('verbose',
-                    short='v',
-                    default=False,
-                    help='Print more verbose output'),
-        cfg.BoolOpt('debug',
-                    short='d',
-                    default=False,
-                    help='Print debugging output'),
-    ]
-
-    def add_common_opts(conf):
-        conf.register_cli_opts(cli_opts)
-
-The config manager has two CLI options defined by default, --config-file
-and --config-dir::
-
-    class ConfigOpts(object):
-
-        def __call__(self, ...):
-
-            opts = [
-                MultiStrOpt('config-file',
-                        ...),
-                StrOpt('config-dir',
-                       ...),
-            ]
-
-            self.register_cli_opts(opts)
-
-Option values are parsed from any supplied config files using
-openstack.common.iniparser. If none are specified, a default set is used
-e.g. glance-api.conf and glance-common.conf::
-
-    glance-api.conf:
-      [DEFAULT]
-      bind_port = 9292
-
-    glance-common.conf:
-      [DEFAULT]
-      bind_host = 0.0.0.0
-
-Option values in config files override those on the command line. Config files
-are parsed in order, with values in later files overriding those in earlier
-files.
-
-The parsing of CLI args and config files is initiated by invoking the config
-manager e.g.::
-
-    conf = ConfigOpts()
-    conf.register_opt(BoolOpt('verbose', ...))
-    conf(sys.argv[1:])
-    if conf.verbose:
-        ...
-
-Options can be registered as belonging to a group::
-
-    rabbit_group = cfg.OptGroup(name='rabbit',
-                                title='RabbitMQ options')
-
-    rabbit_host_opt = cfg.StrOpt('host',
-                                 default='localhost',
-                                 help='IP/hostname to listen on'),
-    rabbit_port_opt = cfg.IntOpt('port',
-                                 default=5672,
-                                 help='Port number to listen on')
-
-    def register_rabbit_opts(conf):
-        conf.register_group(rabbit_group)
-        # options can be registered under a group in either of these ways:
-        conf.register_opt(rabbit_host_opt, group=rabbit_group)
-        conf.register_opt(rabbit_port_opt, group='rabbit')
-
-If it no group attributes are required other than the group name, the group
-need not be explicitly registered e.g.
-
-    def register_rabbit_opts(conf):
-        # The group will automatically be created, equivalent calling::
-        #   conf.register_group(OptGroup(name='rabbit'))
-        conf.register_opt(rabbit_port_opt, group='rabbit')
-
-If no group is specified, options belong to the 'DEFAULT' section of config
-files::
-
-    glance-api.conf:
-      [DEFAULT]
-      bind_port = 9292
-      ...
-
-      [rabbit]
-      host = localhost
-      port = 5672
-      use_ssl = False
-      userid = guest
-      password = guest
-      virtual_host = /
-
-Command-line options in a group are automatically prefixed with the
-group name::
-
-    --rabbit-host localhost --rabbit-port 9999
-
-Option values in the default group are referenced as attributes/properties on
-the config manager; groups are also attributes on the config manager, with
-attributes for each of the options associated with the group::
-
-    server.start(app, conf.bind_port, conf.bind_host, conf)
-
-    self.connection = kombu.connection.BrokerConnection(
-        hostname=conf.rabbit.host,
-        port=conf.rabbit.port,
-        ...)
-
-Option values may reference other values using PEP 292 string substitution::
-
-    opts = [
-        cfg.StrOpt('state_path',
-                   default=os.path.join(os.path.dirname(__file__), '../'),
-                   help='Top-level directory for maintaining nova state'),
-        cfg.StrOpt('sqlite_db',
-                   default='nova.sqlite',
-                   help='file name for sqlite'),
-        cfg.StrOpt('sql_connection',
-                   default='sqlite:///$state_path/$sqlite_db',
-                   help='connection string for sql database'),
-    ]
-
-Note that interpolation can be avoided by using '$$'.
-
-Options may be declared as required so that an error is raised if the user
-does not supply a value for the option.
-
-Options may be declared as secret so that their values are not leaked into
-log files::
-
-     opts = [
-        cfg.StrOpt('s3_store_access_key', secret=True),
-        cfg.StrOpt('s3_store_secret_key', secret=True),
-        ...
-     ]
-
-This module also contains a global instance of the ConfigOpts class
-in order to support a common usage pattern in OpenStack::
-
-    from quantum.openstack.common import cfg
-
-    opts = [
-        cfg.StrOpt('bind_host', default='0.0.0.0'),
-        cfg.IntOpt('bind_port', default=9292),
-    ]
-
-    CONF = cfg.CONF
-    CONF.register_opts(opts)
-
-    def start(server, app):
-        server.start(app, CONF.bind_port, CONF.bind_host)
-
-Positional command line arguments are supported via a 'positional' Opt
-constructor argument::
-
-    >>> conf = ConfigOpts()
-    >>> conf.register_cli_opt(MultiStrOpt('bar', positional=True))
-    True
-    >>> conf(['a', 'b'])
-    >>> conf.bar
-    ['a', 'b']
-
-It is also possible to use argparse "sub-parsers" to parse additional
-command line arguments using the SubCommandOpt class:
-
-    >>> def add_parsers(subparsers):
-    ...     list_action = subparsers.add_parser('list')
-    ...     list_action.add_argument('id')
-    ...
-    >>> conf = ConfigOpts()
-    >>> conf.register_cli_opt(SubCommandOpt('action', handler=add_parsers))
-    True
-    >>> conf(args=['list', '10'])
-    >>> conf.action.name, conf.action.id
-    ('list', '10')
-
-"""
-
-import argparse
-import collections
-import copy
-import functools
-import glob
-import os
-import string
-import sys
-
-from quantum.openstack.common import iniparser
-
-
-class Error(Exception):
-    """Base class for cfg exceptions."""
-
-    def __init__(self, msg=None):
-        self.msg = msg
-
-    def __str__(self):
-        return self.msg
-
-
-class ArgsAlreadyParsedError(Error):
-    """Raised if a CLI opt is registered after parsing."""
-
-    def __str__(self):
-        ret = "arguments already parsed"
-        if self.msg:
-            ret += ": " + self.msg
-        return ret
-
-
-class NoSuchOptError(Error, AttributeError):
-    """Raised if an opt which doesn't exist is referenced."""
-
-    def __init__(self, opt_name, group=None):
-        self.opt_name = opt_name
-        self.group = group
-
-    def __str__(self):
-        if self.group is None:
-            return "no such option: %s" % self.opt_name
-        else:
-            return "no such option in group %s: %s" % (self.group.name,
-                                                       self.opt_name)
-
-
-class NoSuchGroupError(Error):
-    """Raised if a group which doesn't exist is referenced."""
-
-    def __init__(self, group_name):
-        self.group_name = group_name
-
-    def __str__(self):
-        return "no such group: %s" % self.group_name
-
-
-class DuplicateOptError(Error):
-    """Raised if multiple opts with the same name are registered."""
-
-    def __init__(self, opt_name):
-        self.opt_name = opt_name
-
-    def __str__(self):
-        return "duplicate option: %s" % self.opt_name
-
-
-class RequiredOptError(Error):
-    """Raised if an option is required but no value is supplied by the user."""
-
-    def __init__(self, opt_name, group=None):
-        self.opt_name = opt_name
-        self.group = group
-
-    def __str__(self):
-        if self.group is None:
-            return "value required for option: %s" % self.opt_name
-        else:
-            return "value required for option: %s.%s" % (self.group.name,
-                                                         self.opt_name)
-
-
-class TemplateSubstitutionError(Error):
-    """Raised if an error occurs substituting a variable in an opt value."""
-
-    def __str__(self):
-        return "template substitution error: %s" % self.msg
-
-
-class ConfigFilesNotFoundError(Error):
-    """Raised if one or more config files are not found."""
-
-    def __init__(self, config_files):
-        self.config_files = config_files
-
-    def __str__(self):
-        return ('Failed to read some config files: %s' %
-                string.join(self.config_files, ','))
-
-
-class ConfigFileParseError(Error):
-    """Raised if there is an error parsing a config file."""
-
-    def __init__(self, config_file, msg):
-        self.config_file = config_file
-        self.msg = msg
-
-    def __str__(self):
-        return 'Failed to parse %s: %s' % (self.config_file, self.msg)
-
-
-class ConfigFileValueError(Error):
-    """Raised if a config file value does not match its opt type."""
-    pass
-
-
-def _fixpath(p):
-    """Apply tilde expansion and absolutization to a path."""
-    return os.path.abspath(os.path.expanduser(p))
-
-
-def _get_config_dirs(project=None):
-    """Return a list of directors where config files may be located.
-
-    :param project: an optional project name
-
-    If a project is specified, following directories are returned::
-
-      ~/.${project}/
-      ~/
-      /etc/${project}/
-      /etc/
-
-    Otherwise, these directories::
-
-      ~/
-      /etc/
-    """
-    cfg_dirs = [
-        _fixpath(os.path.join('~', '.' + project)) if project else None,
-        _fixpath('~'),
-        os.path.join('/etc', project) if project else None,
-        '/etc'
-    ]
-
-    return filter(bool, cfg_dirs)
-
-
-def _search_dirs(dirs, basename, extension=""):
-    """Search a list of directories for a given filename.
-
-    Iterator over the supplied directories, returning the first file
-    found with the supplied name and extension.
-
-    :param dirs: a list of directories
-    :param basename: the filename, e.g. 'glance-api'
-    :param extension: the file extension, e.g. '.conf'
-    :returns: the path to a matching file, or None
-    """
-    for d in dirs:
-        path = os.path.join(d, '%s%s' % (basename, extension))
-        if os.path.exists(path):
-            return path
-
-
-def find_config_files(project=None, prog=None, extension='.conf'):
-    """Return a list of default configuration files.
-
-    :param project: an optional project name
-    :param prog: the program name, defaulting to the basename of sys.argv[0]
-    :param extension: the type of the config file
-
-    We default to two config files: [${project}.conf, ${prog}.conf]
-
-    And we look for those config files in the following directories::
-
-      ~/.${project}/
-      ~/
-      /etc/${project}/
-      /etc/
-
-    We return an absolute path for (at most) one of each the default config
-    files, for the topmost directory it exists in.
-
-    For example, if project=foo, prog=bar and /etc/foo/foo.conf, /etc/bar.conf
-    and ~/.foo/bar.conf all exist, then we return ['/etc/foo/foo.conf',
-    '~/.foo/bar.conf']
-
-    If no project name is supplied, we only look for ${prog.conf}.
-    """
-    if prog is None:
-        prog = os.path.basename(sys.argv[0])
-
-    cfg_dirs = _get_config_dirs(project)
-
-    config_files = []
-    if project:
-        config_files.append(_search_dirs(cfg_dirs, project, extension))
-    config_files.append(_search_dirs(cfg_dirs, prog, extension))
-
-    return filter(bool, config_files)
-
-
-def _is_opt_registered(opts, opt):
-    """Check whether an opt with the same name is already registered.
-
-    The same opt may be registered multiple times, with only the first
-    registration having any effect. However, it is an error to attempt
-    to register a different opt with the same name.
-
-    :param opts: the set of opts already registered
-    :param opt: the opt to be registered
-    :returns: True if the opt was previously registered, False otherwise
-    :raises: DuplicateOptError if a naming conflict is detected
-    """
-    if opt.dest in opts:
-        if opts[opt.dest]['opt'] != opt:
-            raise DuplicateOptError(opt.name)
-        return True
-    else:
-        return False
-
-
-def set_defaults(opts, **kwargs):
-    for opt in opts:
-        if opt.dest in kwargs:
-            opt.default = kwargs[opt.dest]
-            break
-
-
-class Opt(object):
-
-    """Base class for all configuration options.
-
-    An Opt object has no public methods, but has a number of public string
-    properties:
-
-      name:
-        the name of the option, which may include hyphens
-      dest:
-        the (hyphen-less) ConfigOpts property which contains the option value
-      short:
-        a single character CLI option name
-      default:
-        the default value of the option
-      positional:
-        True if the option is a positional CLI argument
-      metavar:
-        the name shown as the argument to a CLI option in --help output
-      help:
-        an string explaining how the options value is used
-    """
-    multi = False
-
-    def __init__(self, name, dest=None, short=None, default=None,
-                 positional=False, metavar=None, help=None,
-                 secret=False, required=False, deprecated_name=None):
-        """Construct an Opt object.
-
-        The only required parameter is the option's name. However, it is
-        common to also supply a default and help string for all options.
-
-        :param name: the option's name
-        :param dest: the name of the corresponding ConfigOpts property
-        :param short: a single character CLI option name
-        :param default: the default value of the option
-        :param positional: True if the option is a positional CLI argument
-        :param metavar: the option argument to show in --help
-        :param help: an explanation of how the option is used
-        :param secret: true iff the value should be obfuscated in log output
-        :param required: true iff a value must be supplied for this option
-        :param deprecated_name: deprecated name option.  Acts like an alias
-        """
-        self.name = name
-        if dest is None:
-            self.dest = self.name.replace('-', '_')
-        else:
-            self.dest = dest
-        self.short = short
-        self.default = default
-        self.positional = positional
-        self.metavar = metavar
-        self.help = help
-        self.secret = secret
-        self.required = required
-        if deprecated_name is not None:
-            self.deprecated_name = deprecated_name.replace('-', '_')
-        else:
-            self.deprecated_name = None
-
-    def __ne__(self, another):
-        return vars(self) != vars(another)
-
-    def _get_from_config_parser(self, cparser, section):
-        """Retrieves the option value from a MultiConfigParser object.
-
-        This is the method ConfigOpts uses to look up the option value from
-        config files. Most opt types override this method in order to perform
-        type appropriate conversion of the returned value.
-
-        :param cparser: a ConfigParser object
-        :param section: a section name
-        """
-        return self._cparser_get_with_deprecated(cparser, section)
-
-    def _cparser_get_with_deprecated(self, cparser, section):
-        """If cannot find option as dest try deprecated_name alias."""
-        if self.deprecated_name is not None:
-            return cparser.get(section, [self.dest, self.deprecated_name])
-        return cparser.get(section, [self.dest])
-
-    def _add_to_cli(self, parser, group=None):
-        """Makes the option available in the command line interface.
-
-        This is the method ConfigOpts uses to add the opt to the CLI interface
-        as appropriate for the opt type. Some opt types may extend this method,
-        others may just extend the helper methods it uses.
-
-        :param parser: the CLI option parser
-        :param group: an optional OptGroup object
-        """
-        container = self._get_argparse_container(parser, group)
-        kwargs = self._get_argparse_kwargs(group)
-        prefix = self._get_argparse_prefix('', group)
-        self._add_to_argparse(container, self.name, self.short, kwargs, prefix,
-                              self.positional, self.deprecated_name)
-
-    def _add_to_argparse(self, container, name, short, kwargs, prefix='',
-                         positional=False, deprecated_name=None):
-        """Add an option to an argparse parser or group.
-
-        :param container: an argparse._ArgumentGroup object
-        :param name: the opt name
-        :param short: the short opt name
-        :param kwargs: the keyword arguments for add_argument()
-        :param prefix: an optional prefix to prepend to the opt name
-        :param position: whether the optional is a positional CLI argument
-        :raises: DuplicateOptError if a naming confict is detected
-        """
-        def hyphen(arg):
-            return arg if not positional else ''
-
-        args = [hyphen('--') + prefix + name]
-        if short:
-            args.append(hyphen('-') + short)
-        if deprecated_name:
-            args.append(hyphen('--') + prefix + deprecated_name)
-
-        try:
-            container.add_argument(*args, **kwargs)
-        except argparse.ArgumentError as e:
-            raise DuplicateOptError(e)
-
-    def _get_argparse_container(self, parser, group):
-        """Returns an argparse._ArgumentGroup.
-
-        :param parser: an argparse.ArgumentParser
-        :param group: an (optional) OptGroup object
-        :returns: an argparse._ArgumentGroup if group is given, else parser
-        """
-        if group is not None:
-            return group._get_argparse_group(parser)
-        else:
-            return parser
-
-    def _get_argparse_kwargs(self, group, **kwargs):
-        """Build a dict of keyword arguments for argparse's add_argument().
-
-        Most opt types extend this method to customize the behaviour of the
-        options added to argparse.
-
-        :param group: an optional group
-        :param kwargs: optional keyword arguments to add to
-        :returns: a dict of keyword arguments
-        """
-        if not self.positional:
-            dest = self.dest
-            if group is not None:
-                dest = group.name + '_' + dest
-            kwargs['dest'] = dest
-        else:
-            kwargs['nargs'] = '?'
-        kwargs.update({'default': None,
-                       'metavar': self.metavar,
-                       'help': self.help, })
-        return kwargs
-
-    def _get_argparse_prefix(self, prefix, group):
-        """Build a prefix for the CLI option name, if required.
-
-        CLI options in a group are prefixed with the group's name in order
-        to avoid conflicts between similarly named options in different
-        groups.
-
-        :param prefix: an existing prefix to append to (e.g. 'no' or '')
-        :param group: an optional OptGroup object
-        :returns: a CLI option prefix including the group name, if appropriate
-        """
-        if group is not None:
-            return group.name + '-' + prefix
-        else:
-            return prefix
-
-
-class StrOpt(Opt):
-    """
-    String opts do not have their values transformed and are returned as
-    str objects.
-    """
-    pass
-
-
-class BoolOpt(Opt):
-
-    """
-    Bool opts are set to True or False on the command line using --optname or
-    --noopttname respectively.
-
-    In config files, boolean values are case insensitive and can be set using
-    1/0, yes/no, true/false or on/off.
-    """
-
-    _boolean_states = {'1': True, 'yes': True, 'true': True, 'on': True,
-                       '0': False, 'no': False, 'false': False, 'off': False}
-
-    def __init__(self, *args, **kwargs):
-        if 'positional' in kwargs:
-            raise ValueError('positional boolean args not supported')
-        super(BoolOpt, self).__init__(*args, **kwargs)
-
-    def _get_from_config_parser(self, cparser, section):
-        """Retrieve the opt value as a boolean from ConfigParser."""
-        def convert_bool(v):
-            value = self._boolean_states.get(v.lower())
-            if value is None:
-                raise ValueError('Unexpected boolean value %r' % v)
-
-            return value
-
-        return [convert_bool(v) for v in
-                self._cparser_get_with_deprecated(cparser, section)]
-
-    def _add_to_cli(self, parser, group=None):
-        """Extends the base class method to add the --nooptname option."""
-        super(BoolOpt, self)._add_to_cli(parser, group)
-        self._add_inverse_to_argparse(parser, group)
-
-    def _add_inverse_to_argparse(self, parser, group):
-        """Add the --nooptname option to the option parser."""
-        container = self._get_argparse_container(parser, group)
-        kwargs = self._get_argparse_kwargs(group, action='store_false')
-        prefix = self._get_argparse_prefix('no', group)
-        kwargs["help"] = "The inverse of --" + self.name
-        self._add_to_argparse(container, self.name, None, kwargs, prefix,
-                              self.positional, self.deprecated_name)
-
-    def _get_argparse_kwargs(self, group, action='store_true', **kwargs):
-        """Extends the base argparse keyword dict for boolean options."""
-
-        kwargs = super(BoolOpt, self)._get_argparse_kwargs(group, **kwargs)
-
-        # metavar has no effect for BoolOpt
-        if 'metavar' in kwargs:
-            del kwargs['metavar']
-
-        if action != 'store_true':
-            action = 'store_false'
-
-        kwargs['action'] = action
-
-        return kwargs
-
-
-class IntOpt(Opt):
-
-    """Int opt values are converted to integers using the int() builtin."""
-
-    def _get_from_config_parser(self, cparser, section):
-        """Retrieve the opt value as a integer from ConfigParser."""
-        return [int(v) for v in self._cparser_get_with_deprecated(cparser,
-                section)]
-
-    def _get_argparse_kwargs(self, group, **kwargs):
-        """Extends the base argparse keyword dict for integer options."""
-        return super(IntOpt,
-                     self)._get_argparse_kwargs(group, type=int, **kwargs)
-
-
-class FloatOpt(Opt):
-
-    """Float opt values are converted to floats using the float() builtin."""
-
-    def _get_from_config_parser(self, cparser, section):
-        """Retrieve the opt value as a float from ConfigParser."""
-        return [float(v) for v in
-                self._cparser_get_with_deprecated(cparser, section)]
-
-    def _get_argparse_kwargs(self, group, **kwargs):
-        """Extends the base argparse keyword dict for float options."""
-        return super(FloatOpt, self)._get_argparse_kwargs(group,
-                                                          type=float, **kwargs)
-
-
-class ListOpt(Opt):
-
-    """
-    List opt values are simple string values separated by commas. The opt value
-    is a list containing these strings.
-    """
-
-    class _StoreListAction(argparse.Action):
-        """
-        An argparse action for parsing an option value into a list.
-        """
-        def __call__(self, parser, namespace, values, option_string=None):
-            if values is not None:
-                values = [a.strip() for a in values.split(',')]
-            setattr(namespace, self.dest, values)
-
-    def _get_from_config_parser(self, cparser, section):
-        """Retrieve the opt value as a list from ConfigParser."""
-        return [[a.strip() for a in v.split(',')] for v in
-                self._cparser_get_with_deprecated(cparser, section)]
-
-    def _get_argparse_kwargs(self, group, **kwargs):
-        """Extends the base argparse keyword dict for list options."""
-        return Opt._get_argparse_kwargs(self,
-                                        group,
-                                        action=ListOpt._StoreListAction,
-                                        **kwargs)
-
-
-class MultiStrOpt(Opt):
-
-    """
-    Multistr opt values are string opts which may be specified multiple times.
-    The opt value is a list containing all the string values specified.
-    """
-    multi = True
-
-    def _get_argparse_kwargs(self, group, **kwargs):
-        """Extends the base argparse keyword dict for multi str options."""
-        kwargs = super(MultiStrOpt, self)._get_argparse_kwargs(group)
-        if not self.positional:
-            kwargs['action'] = 'append'
-        else:
-            kwargs['nargs'] = '*'
-        return kwargs
-
-    def _cparser_get_with_deprecated(self, cparser, section):
-        """If cannot find option as dest try deprecated_name alias."""
-        if self.deprecated_name is not None:
-            return cparser.get(section, [self.dest, self.deprecated_name],
-                               multi=True)
-        return cparser.get(section, [self.dest], multi=True)
-
-
-class SubCommandOpt(Opt):
-
-    """
-    Sub-command options allow argparse sub-parsers to be used to parse
-    additional command line arguments.
-
-    The handler argument to the SubCommandOpt contructor is a callable
-    which is supplied an argparse subparsers object. Use this handler
-    callable to add sub-parsers.
-
-    The opt value is SubCommandAttr object with the name of the chosen
-    sub-parser stored in the 'name' attribute and the values of other
-    sub-parser arguments available as additional attributes.
-    """
-
-    def __init__(self, name, dest=None, handler=None,
-                 title=None, description=None, help=None):
-        """Construct an sub-command parsing option.
-
-        This behaves similarly to other Opt sub-classes but adds a
-        'handler' argument. The handler is a callable which is supplied
-        an subparsers object when invoked. The add_parser() method on
-        this subparsers object can be used to register parsers for
-        sub-commands.
-
-        :param name: the option's name
-        :param dest: the name of the corresponding ConfigOpts property
-        :param title: title of the sub-commands group in help output
-        :param description: description of the group in help output
-        :param help: a help string giving an overview of available sub-commands
-        """
-        super(SubCommandOpt, self).__init__(name, dest=dest, help=help)
-        self.handler = handler
-        self.title = title
-        self.description = description
-
-    def _add_to_cli(self, parser, group=None):
-        """Add argparse sub-parsers and invoke the handler method."""
-        dest = self.dest
-        if group is not None:
-            dest = group.name + '_' + dest
-
-        subparsers = parser.add_subparsers(dest=dest,
-                                           title=self.title,
-                                           description=self.description,
-                                           help=self.help)
-
-        if self.handler is not None:
-            self.handler(subparsers)
-
-
-class OptGroup(object):
-
-    """
-    Represents a group of opts.
-
-    CLI opts in the group are automatically prefixed with the group name.
-
-    Each group corresponds to a section in config files.
-
-    An OptGroup object has no public methods, but has a number of public string
-    properties:
-
-      name:
-        the name of the group
-      title:
-        the group title as displayed in --help
-      help:
-        the group description as displayed in --help
-    """
-
-    def __init__(self, name, title=None, help=None):
-        """Constructs an OptGroup object.
-
-        :param name: the group name
-        :param title: the group title for --help
-        :param help: the group description for --help
-        """
-        self.name = name
-        if title is None:
-            self.title = "%s options" % title
-        else:
-            self.title = title
-        self.help = help
-
-        self._opts = {}  # dict of dicts of (opt:, override:, default:)
-        self._argparse_group = None
-
-    def _register_opt(self, opt, cli=False):
-        """Add an opt to this group.
-
-        :param opt: an Opt object
-        :param cli: whether this is a CLI option
-        :returns: False if previously registered, True otherwise
-        :raises: DuplicateOptError if a naming conflict is detected
-        """
-        if _is_opt_registered(self._opts, opt):
-            return False
-
-        self._opts[opt.dest] = {'opt': opt, 'cli': cli}
-
-        return True
-
-    def _unregister_opt(self, opt):
-        """Remove an opt from this group.
-
-        :param opt: an Opt object
-        """
-        if opt.dest in self._opts:
-            del self._opts[opt.dest]
-
-    def _get_argparse_group(self, parser):
-        if self._argparse_group is None:
-            """Build an argparse._ArgumentGroup for this group."""
-            self._argparse_group = parser.add_argument_group(self.title,
-                                                             self.help)
-        return self._argparse_group
-
-    def _clear(self):
-        """Clear this group's option parsing state."""
-        self._argparse_group = None
-
-
-class ParseError(iniparser.ParseError):
-    def __init__(self, msg, lineno, line, filename):
-        super(ParseError, self).__init__(msg, lineno, line)
-        self.filename = filename
-
-    def __str__(self):
-        return 'at %s:%d, %s: %r' % (self.filename, self.lineno,
-                                     self.msg, self.line)
-
-
-class ConfigParser(iniparser.BaseParser):
-    def __init__(self, filename, sections):
-        super(ConfigParser, self).__init__()
-        self.filename = filename
-        self.sections = sections
-        self.section = None
-
-    def parse(self):
-        with open(self.filename) as f:
-            return super(ConfigParser, self).parse(f)
-
-    def new_section(self, section):
-        self.section = section
-        self.sections.setdefault(self.section, {})
-
-    def assignment(self, key, value):
-        if not self.section:
-            raise self.error_no_section()
-
-        self.sections[self.section].setdefault(key, [])
-        self.sections[self.section][key].append('\n'.join(value))
-
-    def parse_exc(self, msg, lineno, line=None):
-        return ParseError(msg, lineno, line, self.filename)
-
-    def error_no_section(self):
-        return self.parse_exc('Section must be started before assignment',
-                              self.lineno)
-
-
-class MultiConfigParser(object):
-    def __init__(self):
-        self.parsed = []
-
-    def read(self, config_files):
-        read_ok = []
-
-        for filename in config_files:
-            sections = {}
-            parser = ConfigParser(filename, sections)
-
-            try:
-                parser.parse()
-            except IOError:
-                continue
-            self.parsed.insert(0, sections)
-            read_ok.append(filename)
-
-        return read_ok
-
-    def get(self, section, names, multi=False):
-        rvalue = []
-        for sections in self.parsed:
-            if section not in sections:
-                continue
-            for name in names:
-                if name in sections[section]:
-                    if multi:
-                        rvalue = sections[section][name] + rvalue
-                    else:
-                        return sections[section][name]
-        if multi and rvalue != []:
-            return rvalue
-        raise KeyError
-
-
-class ConfigOpts(collections.Mapping):
-
-    """
-    Config options which may be set on the command line or in config files.
-
-    ConfigOpts is a configuration option manager with APIs for registering
-    option schemas, grouping options, parsing option values and retrieving
-    the values of options.
-    """
-
-    def __init__(self):
-        """Construct a ConfigOpts object."""
-        self._opts = {}  # dict of dicts of (opt:, override:, default:)
-        self._groups = {}
-
-        self._args = None
-
-        self._oparser = None
-        self._cparser = None
-        self._cli_values = {}
-        self.__cache = {}
-        self._config_opts = []
-
-    def _pre_setup(self, project, prog, version, usage, default_config_files):
-        """Initialize a ConfigCliParser object for option parsing."""
-
-        if prog is None:
-            prog = os.path.basename(sys.argv[0])
-
-        if default_config_files is None:
-            default_config_files = find_config_files(project, prog)
-
-        self._oparser = argparse.ArgumentParser(prog=prog, usage=usage)
-        self._oparser.add_argument('--version',
-                                   action='version',
-                                   version=version)
-
-        return prog, default_config_files
-
-    def _setup(self, project, prog, version, usage, default_config_files):
-        """Initialize a ConfigOpts object for option parsing."""
-
-        self._config_opts = [
-            MultiStrOpt('config-file',
-                        default=default_config_files,
-                        metavar='PATH',
-                        help='Path to a config file to use. Multiple config '
-                             'files can be specified, with values in later '
-                             'files taking precedence. The default files '
-                             ' used are: %s' % (default_config_files, )),
-            StrOpt('config-dir',
-                   metavar='DIR',
-                   help='Path to a config directory to pull *.conf '
-                        'files from. This file set is sorted, so as to '
-                        'provide a predictable parse order if individual '
-                        'options are over-ridden. The set is parsed after '
-                        'the file(s), if any, specified via --config-file, '
-                        'hence over-ridden options in the directory take '
-                        'precedence.'),
-        ]
-        self.register_cli_opts(self._config_opts)
-
-        self.project = project
-        self.prog = prog
-        self.version = version
-        self.usage = usage
-        self.default_config_files = default_config_files
-
-    def __clear_cache(f):
-        @functools.wraps(f)
-        def __inner(self, *args, **kwargs):
-            if kwargs.pop('clear_cache', True):
-                self.__cache.clear()
-            return f(self, *args, **kwargs)
-
-        return __inner
-
-    def __call__(self,
-                 args=None,
-                 project=None,
-                 prog=None,
-                 version=None,
-                 usage=None,
-                 default_config_files=None):
-        """Parse command line arguments and config files.
-
-        Calling a ConfigOpts object causes the supplied command line arguments
-        and config files to be parsed, causing opt values to be made available
-        as attributes of the object.
-
-        The object may be called multiple times, each time causing the previous
-        set of values to be overwritten.
-
-        Automatically registers the --config-file option with either a supplied
-        list of default config files, or a list from find_config_files().
-
-        If the --config-dir option is set, any *.conf files from this
-        directory are pulled in, after all the file(s) specified by the
-        --config-file option.
-
-        :param args: command line arguments (defaults to sys.argv[1:])
-        :param project: the toplevel project name, used to locate config files
-        :param prog: the name of the program (defaults to sys.argv[0] basename)
-        :param version: the program version (for --version)
-        :param usage: a usage string (%prog will be expanded)
-        :param default_config_files: config files to use by default
-        :returns: the list of arguments left over after parsing options
-        :raises: SystemExit, ConfigFilesNotFoundError, ConfigFileParseError,
-                 RequiredOptError, DuplicateOptError
-        """
-
-        self.clear()
-
-        prog, default_config_files = self._pre_setup(project,
-                                                     prog,
-                                                     version,
-                                                     usage,
-                                                     default_config_files)
-
-        self._setup(project, prog, version, usage, default_config_files)
-
-        self._cli_values = self._parse_cli_opts(args)
-
-        self._parse_config_files()
-
-        self._check_required_opts()
-
-    def __getattr__(self, name):
-        """Look up an option value and perform string substitution.
-
-        :param name: the opt name (or 'dest', more precisely)
-        :returns: the option value (after string subsititution) or a GroupAttr
-        :raises: NoSuchOptError,ConfigFileValueError,TemplateSubstitutionError
-        """
-        return self._get(name)
-
-    def __getitem__(self, key):
-        """Look up an option value and perform string substitution."""
-        return self.__getattr__(key)
-
-    def __contains__(self, key):
-        """Return True if key is the name of a registered opt or group."""
-        return key in self._opts or key in self._groups
-
-    def __iter__(self):
-        """Iterate over all registered opt and group names."""
-        for key in self._opts.keys() + self._groups.keys():
-            yield key
-
-    def __len__(self):
-        """Return the number of options and option groups."""
-        return len(self._opts) + len(self._groups)
-
-    def reset(self):
-        """Clear the object state and unset overrides and defaults."""
-        self._unset_defaults_and_overrides()
-        self.clear()
-
-    @__clear_cache
-    def clear(self):
-        """Clear the state of the object to before it was called.
-
-        Any subparsers added using the add_cli_subparsers() will also be
-        removed as a side-effect of this method.
-        """
-        self._args = None
-        self._cli_values.clear()
-        self._oparser = argparse.ArgumentParser()
-        self._cparser = None
-        self.unregister_opts(self._config_opts)
-        for group in self._groups.values():
-            group._clear()
-
-    @__clear_cache
-    def register_opt(self, opt, group=None, cli=False):
-        """Register an option schema.
-
-        Registering an option schema makes any option value which is previously
-        or subsequently parsed from the command line or config files available
-        as an attribute of this object.
-
-        :param opt: an instance of an Opt sub-class
-        :param cli: whether this is a CLI option
-        :param group: an optional OptGroup object or group name
-        :return: False if the opt was already register, True otherwise
-        :raises: DuplicateOptError
-        """
-        if group is not None:
-            group = self._get_group(group, autocreate=True)
-            return group._register_opt(opt, cli)
-
-        if _is_opt_registered(self._opts, opt):
-            return False
-
-        self._opts[opt.dest] = {'opt': opt, 'cli': cli}
-
-        return True
-
-    @__clear_cache
-    def register_opts(self, opts, group=None):
-        """Register multiple option schemas at once."""
-        for opt in opts:
-            self.register_opt(opt, group, clear_cache=False)
-
-    @__clear_cache
-    def register_cli_opt(self, opt, group=None):
-        """Register a CLI option schema.
-
-        CLI option schemas must be registered before the command line and
-        config files are parsed. This is to ensure that all CLI options are
-        show in --help and option validation works as expected.
-
-        :param opt: an instance of an Opt sub-class
-        :param group: an optional OptGroup object or group name
-        :return: False if the opt was already register, True otherwise
-        :raises: DuplicateOptError, ArgsAlreadyParsedError
-        """
-        if self._args is not None:
-            raise ArgsAlreadyParsedError("cannot register CLI option")
-
-        return self.register_opt(opt, group, cli=True, clear_cache=False)
-
-    @__clear_cache
-    def register_cli_opts(self, opts, group=None):
-        """Register multiple CLI option schemas at once."""
-        for opt in opts:
-            self.register_cli_opt(opt, group, clear_cache=False)
-
-    def register_group(self, group):
-        """Register an option group.
-
-        An option group must be registered before options can be registered
-        with the group.
-
-        :param group: an OptGroup object
-        """
-        if group.name in self._groups:
-            return
-
-        self._groups[group.name] = copy.copy(group)
-
-    @__clear_cache
-    def unregister_opt(self, opt, group=None):
-        """Unregister an option.
-
-        :param opt: an Opt object
-        :param group: an optional OptGroup object or group name
-        :raises: ArgsAlreadyParsedError, NoSuchGroupError
-        """
-        if self._args is not None:
-            raise ArgsAlreadyParsedError("reset before unregistering options")
-
-        if group is not None:
-            self._get_group(group)._unregister_opt(opt)
-        elif opt.dest in self._opts:
-            del self._opts[opt.dest]
-
-    @__clear_cache
-    def unregister_opts(self, opts, group=None):
-        """Unregister multiple CLI option schemas at once."""
-        for opt in opts:
-            self.unregister_opt(opt, group, clear_cache=False)
-
-    def import_opt(self, name, module_str, group=None):
-        """Import an option definition from a module.
-
-        Import a module and check that a given option is registered.
-
-        This is intended for use with global configuration objects
-        like cfg.CONF where modules commonly register options with
-        CONF at module load time. If one module requires an option
-        defined by another module it can use this method to explicitly
-        declare the dependency.
-
-        :param name: the name/dest of the opt
-        :param module_str: the name of a module to import
-        :param group: an option OptGroup object or group name
-        :raises: NoSuchOptError, NoSuchGroupError
-        """
-        __import__(module_str)
-        self._get_opt_info(name, group)
-
-    def import_group(self, group, module_str):
-        """Import an option group from a module.
-
-        Import a module and check that a given option group is registered.
-
-        This is intended for use with global configuration objects
-        like cfg.CONF where modules commonly register options with
-        CONF at module load time. If one module requires an option group
-        defined by another module it can use this method to explicitly
-        declare the dependency.
-
-        :param group: an option OptGroup object or group name
-        :param module_str: the name of a module to import
-        :raises: ImportError, NoSuchGroupError
-        """
-        __import__(module_str)
-        self._get_group(group)
-
-    @__clear_cache
-    def set_override(self, name, override, group=None):
-        """Override an opt value.
-
-        Override the command line, config file and default values of a
-        given option.
-
-        :param name: the name/dest of the opt
-        :param override: the override value
-        :param group: an option OptGroup object or group name
-        :raises: NoSuchOptError, NoSuchGroupError
-        """
-        opt_info = self._get_opt_info(name, group)
-        opt_info['override'] = override
-
-    @__clear_cache
-    def set_default(self, name, default, group=None):
-        """Override an opt's default value.
-
-        Override the default value of given option. A command line or
-        config file value will still take precedence over this default.
-
-        :param name: the name/dest of the opt
-        :param default: the default value
-        :param group: an option OptGroup object or group name
-        :raises: NoSuchOptError, NoSuchGroupError
-        """
-        opt_info = self._get_opt_info(name, group)
-        opt_info['default'] = default
-
-    @__clear_cache
-    def clear_override(self, name, group=None):
-        """Clear an override an opt value.
-
-        Clear a previously set override of the command line, config file
-        and default values of a given option.
-
-        :param name: the name/dest of the opt
-        :param group: an option OptGroup object or group name
-        :raises: NoSuchOptError, NoSuchGroupError
-        """
-        opt_info = self._get_opt_info(name, group)
-        opt_info.pop('override', None)
-
-    @__clear_cache
-    def clear_default(self, name, group=None):
-        """Clear an override an opt's default value.
-
-        Clear a previously set override of the default value of given option.
-
-        :param name: the name/dest of the opt
-        :param group: an option OptGroup object or group name
-        :raises: NoSuchOptError, NoSuchGroupError
-        """
-        opt_info = self._get_opt_info(name, group)
-        opt_info.pop('default', None)
-
-    def _all_opt_infos(self):
-        """A generator function for iteration opt infos."""
-        for info in self._opts.values():
-            yield info, None
-        for group in self._groups.values():
-            for info in group._opts.values():
-                yield info, group
-
-    def _all_cli_opts(self):
-        """A generator function for iterating CLI opts."""
-        for info, group in self._all_opt_infos():
-            if info['cli']:
-                yield info['opt'], group
-
-    def _unset_defaults_and_overrides(self):
-        """Unset any default or override on all options."""
-        for info, group in self._all_opt_infos():
-            info.pop('default', None)
-            info.pop('override', None)
-
-    def find_file(self, name):
-        """Locate a file located alongside the config files.
-
-        Search for a file with the supplied basename in the directories
-        which we have already loaded config files from and other known
-        configuration directories.
-
-        The directory, if any, supplied by the config_dir option is
-        searched first. Then the config_file option is iterated over
-        and each of the base directories of the config_files values
-        are searched. Failing both of these, the standard directories
-        searched by the module level find_config_files() function is
-        used. The first matching file is returned.
-
-        :param basename: the filename, e.g. 'policy.json'
-        :returns: the path to a matching file, or None
-        """
-        dirs = []
-        if self.config_dir:
-            dirs.append(_fixpath(self.config_dir))
-
-        for cf in reversed(self.config_file):
-            dirs.append(os.path.dirname(_fixpath(cf)))
-
-        dirs.extend(_get_config_dirs(self.project))
-
-        return _search_dirs(dirs, name)
-
-    def log_opt_values(self, logger, lvl):
-        """Log the value of all registered opts.
-
-        It's often useful for an app to log its configuration to a log file at
-        startup for debugging. This method dumps to the entire config state to
-        the supplied logger at a given log level.
-
-        :param logger: a logging.Logger object
-        :param lvl: the log level (e.g. logging.DEBUG) arg to logger.log()
-        """
-        logger.log(lvl, "*" * 80)
-        logger.log(lvl, "Configuration options gathered from:")
-        logger.log(lvl, "command line args: %s", self._args)
-        logger.log(lvl, "config files: %s", self.config_file)
-        logger.log(lvl, "=" * 80)
-
-        def _sanitize(opt, value):
-            """Obfuscate values of options declared secret"""
-            return value if not opt.secret else '*' * len(str(value))
-
-        for opt_name in sorted(self._opts):
-            opt = self._get_opt_info(opt_name)['opt']
-            logger.log(lvl, "%-30s = %s", opt_name,
-                       _sanitize(opt, getattr(self, opt_name)))
-
-        for group_name in self._groups:
-            group_attr = self.GroupAttr(self, self._get_group(group_name))
-            for opt_name in sorted(self._groups[group_name]._opts):
-                opt = self._get_opt_info(opt_name, group_name)['opt']
-                logger.log(lvl, "%-30s = %s",
-                           "%s.%s" % (group_name, opt_name),
-                           _sanitize(opt, getattr(group_attr, opt_name)))
-
-        logger.log(lvl, "*" * 80)
-
-    def print_usage(self, file=None):
-        """Print the usage message for the current program."""
-        self._oparser.print_usage(file)
-
-    def print_help(self, file=None):
-        """Print the help message for the current program."""
-        self._oparser.print_help(file)
-
-    def _get(self, name, group=None):
-        if isinstance(group, OptGroup):
-            key = (group.name, name)
-        else:
-            key = (group, name)
-        try:
-            return self.__cache[key]
-        except KeyError:
-            value = self._substitute(self._do_get(name, group))
-            self.__cache[key] = value
-            return value
-
-    def _do_get(self, name, group=None):
-        """Look up an option value.
-
-        :param name: the opt name (or 'dest', more precisely)
-        :param group: an OptGroup
-        :returns: the option value, or a GroupAttr object
-        :raises: NoSuchOptError, NoSuchGroupError, ConfigFileValueError,
-                 TemplateSubstitutionError
-        """
-        if group is None and name in self._groups:
-            return self.GroupAttr(self, self._get_group(name))
-
-        info = self._get_opt_info(name, group)
-        opt = info['opt']
-
-        if isinstance(opt, SubCommandOpt):
-            return self.SubCommandAttr(self, group, opt.dest)
-
-        if 'override' in info:
-            return info['override']
-
-        values = []
-        if self._cparser is not None:
-            section = group.name if group is not None else 'DEFAULT'
-            try:
-                value = opt._get_from_config_parser(self._cparser, section)
-            except KeyError:
-                pass
-            except ValueError as ve:
-                raise ConfigFileValueError(str(ve))
-            else:
-                if not opt.multi:
-                    # No need to continue since the last value wins
-                    return value[-1]
-                values.extend(value)
-
-        name = name if group is None else group.name + '_' + name
-        value = self._cli_values.get(name)
-        if value is not None:
-            if not opt.multi:
-                return value
-
-            # argparse ignores default=None for nargs='*'
-            if opt.positional and not value:
-                value = opt.default
-
-            return value + values
-
-        if values:
-            return values
-
-        if 'default' in info:
-            return info['default']
-
-        return opt.default
-
-    def _substitute(self, value):
-        """Perform string template substitution.
-
-        Substitute any template variables (e.g. $foo, ${bar}) in the supplied
-        string value(s) with opt values.
-
-        :param value: the string value, or list of string values
-        :returns: the substituted string(s)
-        """
-        if isinstance(value, list):
-            return [self._substitute(i) for i in value]
-        elif isinstance(value, str):
-            tmpl = string.Template(value)
-            return tmpl.safe_substitute(self.StrSubWrapper(self))
-        else:
-            return value
-
-    def _get_group(self, group_or_name, autocreate=False):
-        """Looks up a OptGroup object.
-
-        Helper function to return an OptGroup given a parameter which can
-        either be the group's name or an OptGroup object.
-
-        The OptGroup object returned is from the internal dict of OptGroup
-        objects, which will be a copy of any OptGroup object that users of
-        the API have access to.
-
-        :param group_or_name: the group's name or the OptGroup object itself
-        :param autocreate: whether to auto-create the group if it's not found
-        :raises: NoSuchGroupError
-        """
-        group = group_or_name if isinstance(group_or_name, OptGroup) else None
-        group_name = group.name if group else group_or_name
-
-        if group_name not in self._groups:
-            if group is not None or not autocreate:
-                raise NoSuchGroupError(group_name)
-
-            self.register_group(OptGroup(name=group_name))
-
-        return self._groups[group_name]
-
-    def _get_opt_info(self, opt_name, group=None):
-        """Return the (opt, override, default) dict for an opt.
-
-        :param opt_name: an opt name/dest
-        :param group: an optional group name or OptGroup object
-        :raises: NoSuchOptError, NoSuchGroupError
-        """
-        if group is None:
-            opts = self._opts
-        else:
-            group = self._get_group(group)
-            opts = group._opts
-
-        if opt_name not in opts:
-            raise NoSuchOptError(opt_name, group)
-
-        return opts[opt_name]
-
-    def _parse_config_files(self):
-        """Parse the config files from --config-file and --config-dir.
-
-        :raises: ConfigFilesNotFoundError, ConfigFileParseError
-        """
-        config_files = list(self.config_file)
-
-        if self.config_dir:
-            config_dir_glob = os.path.join(self.config_dir, '*.conf')
-            config_files += sorted(glob.glob(config_dir_glob))
-
-        config_files = [_fixpath(p) for p in config_files]
-
-        self._cparser = MultiConfigParser()
-
-        try:
-            read_ok = self._cparser.read(config_files)
-        except iniparser.ParseError as pe:
-            raise ConfigFileParseError(pe.filename, str(pe))
-
-        if read_ok != config_files:
-            not_read_ok = filter(lambda f: f not in read_ok, config_files)
-            raise ConfigFilesNotFoundError(not_read_ok)
-
-    def _check_required_opts(self):
-        """Check that all opts marked as required have values specified.
-
-        :raises: RequiredOptError
-        """
-        for info, group in self._all_opt_infos():
-            opt = info['opt']
-
-            if opt.required:
-                if 'default' in info or 'override' in info:
-                    continue
-
-                if self._get(opt.dest, group) is None:
-                    raise RequiredOptError(opt.name, group)
-
-    def _parse_cli_opts(self, args):
-        """Parse command line options.
-
-        Initializes the command line option parser and parses the supplied
-        command line arguments.
-
-        :param args: the command line arguments
-        :returns: a dict of parsed option values
-        :raises: SystemExit, DuplicateOptError
-
-        """
-        self._args = args
-
-        for opt, group in sorted(self._all_cli_opts()):
-            opt._add_to_cli(self._oparser, group)
-
-        return vars(self._oparser.parse_args(args))
-
-    class GroupAttr(collections.Mapping):
-
-        """
-        A helper class representing the option values of a group as a mapping
-        and attributes.
-        """
-
-        def __init__(self, conf, group):
-            """Construct a GroupAttr object.
-
-            :param conf: a ConfigOpts object
-            :param group: an OptGroup object
-            """
-            self._conf = conf
-            self._group = group
-
-        def __getattr__(self, name):
-            """Look up an option value and perform template substitution."""
-            return self._conf._get(name, self._group)
-
-        def __getitem__(self, key):
-            """Look up an option value and perform string substitution."""
-            return self.__getattr__(key)
-
-        def __contains__(self, key):
-            """Return True if key is the name of a registered opt or group."""
-            return key in self._group._opts
-
-        def __iter__(self):
-            """Iterate over all registered opt and group names."""
-            for key in self._group._opts.keys():
-                yield key
-
-        def __len__(self):
-            """Return the number of options and option groups."""
-            return len(self._group._opts)
-
-    class SubCommandAttr(object):
-
-        """
-        A helper class representing the name and arguments of an argparse
-        sub-parser.
-        """
-
-        def __init__(self, conf, group, dest):
-            """Construct a SubCommandAttr object.
-
-            :param conf: a ConfigOpts object
-            :param group: an OptGroup object
-            :param dest: the name of the sub-parser
-            """
-            self._conf = conf
-            self._group = group
-            self._dest = dest
-
-        def __getattr__(self, name):
-            """Look up a sub-parser name or argument value."""
-            if name == 'name':
-                name = self._dest
-                if self._group is not None:
-                    name = self._group.name + '_' + name
-                return self._conf._cli_values[name]
-
-            if name in self._conf:
-                raise DuplicateOptError(name)
-
-            try:
-                return self._conf._cli_values[name]
-            except KeyError:
-                raise NoSuchOptError(name)
-
-    class StrSubWrapper(object):
-
-        """
-        A helper class exposing opt values as a dict for string substitution.
-        """
-
-        def __init__(self, conf):
-            """Construct a StrSubWrapper object.
-
-            :param conf: a ConfigOpts object
-            """
-            self.conf = conf
-
-        def __getitem__(self, key):
-            """Look up an opt value from the ConfigOpts object.
-
-            :param key: an opt name
-            :returns: an opt value
-            :raises: TemplateSubstitutionError if attribute is a group
-            """
-            value = getattr(self.conf, key)
-            if isinstance(value, self.conf.GroupAttr):
-                raise TemplateSubstitutionError(
-                    'substituting group %s not supported' % key)
-            return value
-
-
-CONF = ConfigOpts()
+from oslo.config.cfg import *
index 6af0f9da496f9ed2f9612af59613b1776aa440b3..61ceded438e009914a523b6607ac6c7277878a48 100644 (file)
@@ -24,8 +24,7 @@ import traceback
 import eventlet
 import eventlet.backdoor
 import greenlet
-
-from quantum.openstack.common import cfg
+from oslo.config import cfg
 
 eventlet_backdoor_opts = [
     cfg.IntOpt('backdoor_port',
diff --git a/quantum/openstack/common/iniparser.py b/quantum/openstack/common/iniparser.py
deleted file mode 100644 (file)
index 9bf399f..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2012 OpenStack LLC.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-
-class ParseError(Exception):
-    def __init__(self, message, lineno, line):
-        self.msg = message
-        self.line = line
-        self.lineno = lineno
-
-    def __str__(self):
-        return 'at line %d, %s: %r' % (self.lineno, self.msg, self.line)
-
-
-class BaseParser(object):
-    lineno = 0
-    parse_exc = ParseError
-
-    def _assignment(self, key, value):
-        self.assignment(key, value)
-        return None, []
-
-    def _get_section(self, line):
-        if line[-1] != ']':
-            return self.error_no_section_end_bracket(line)
-        if len(line) <= 2:
-            return self.error_no_section_name(line)
-
-        return line[1:-1]
-
-    def _split_key_value(self, line):
-        colon = line.find(':')
-        equal = line.find('=')
-        if colon < 0 and equal < 0:
-            return self.error_invalid_assignment(line)
-
-        if colon < 0 or (equal >= 0 and equal < colon):
-            key, value = line[:equal], line[equal + 1:]
-        else:
-            key, value = line[:colon], line[colon + 1:]
-
-        value = value.strip()
-        if ((value and value[0] == value[-1]) and
-                (value[0] == "\"" or value[0] == "'")):
-            value = value[1:-1]
-        return key.strip(), [value]
-
-    def parse(self, lineiter):
-        key = None
-        value = []
-
-        for line in lineiter:
-            self.lineno += 1
-
-            line = line.rstrip()
-            if not line:
-                # Blank line, ends multi-line values
-                if key:
-                    key, value = self._assignment(key, value)
-                continue
-            elif line[0] in (' ', '\t'):
-                # Continuation of previous assignment
-                if key is None:
-                    self.error_unexpected_continuation(line)
-                else:
-                    value.append(line.lstrip())
-                continue
-
-            if key:
-                # Flush previous assignment, if any
-                key, value = self._assignment(key, value)
-
-            if line[0] == '[':
-                # Section start
-                section = self._get_section(line)
-                if section:
-                    self.new_section(section)
-            elif line[0] in '#;':
-                self.comment(line[1:].lstrip())
-            else:
-                key, value = self._split_key_value(line)
-                if not key:
-                    return self.error_empty_key(line)
-
-        if key:
-            # Flush previous assignment, if any
-            self._assignment(key, value)
-
-    def assignment(self, key, value):
-        """Called when a full assignment is parsed"""
-        raise NotImplementedError()
-
-    def new_section(self, section):
-        """Called when a new section is started"""
-        raise NotImplementedError()
-
-    def comment(self, comment):
-        """Called when a comment is parsed"""
-        pass
-
-    def error_invalid_assignment(self, line):
-        raise self.parse_exc("No ':' or '=' found in assignment",
-                             self.lineno, line)
-
-    def error_empty_key(self, line):
-        raise self.parse_exc('Key cannot be empty', self.lineno, line)
-
-    def error_unexpected_continuation(self, line):
-        raise self.parse_exc('Unexpected continuation line',
-                             self.lineno, line)
-
-    def error_no_section_end_bracket(self, line):
-        raise self.parse_exc('Invalid section (must end with ])',
-                             self.lineno, line)
-
-    def error_no_section_name(self, line):
-        raise self.parse_exc('Empty section name', self.lineno, line)
index 750a47bc725cb1a911e0635bc85bf33fc1dede56..973607e2002c86021779b810a68f8fd0d27aef90 100644 (file)
@@ -25,8 +25,8 @@ import time
 import weakref
 
 from eventlet import semaphore
+from oslo.config import cfg
 
-from quantum.openstack.common import cfg
 from quantum.openstack.common import fileutils
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import local
index e6e8414c3988fd0cc9d801cf1180814b1e9db133..ef7e27e8ad19b0f46a3634e29f7657ff7cb0c136 100644 (file)
@@ -40,7 +40,8 @@ import stat
 import sys
 import traceback
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import jsonutils
 from quantum.openstack.common import local
index 09ab447a36cf7c129ad1a21c16e73d34d2221911..13cfea2e251223545afb5c497c788374285e8d66 100644 (file)
@@ -15,7 +15,8 @@
 
 import uuid
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 from quantum.openstack.common import context
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import importutils
index 225cbd1e10517efbc9d574d98c8e9a1d3da228a5..bc8f61865edd252d610b68f9e49979933fdc700a 100644 (file)
@@ -14,7 +14,8 @@
 #    under the License.
 
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 from quantum.openstack.common import jsonutils
 from quantum.openstack.common import log as logging
 
index 213779777b909d7c21c14ff663a0e865cc6cad1e..8d84aa69c0ca5d96c61729478d8b695c71c4652b 100644 (file)
@@ -14,7 +14,8 @@
 #    under the License.
 
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 from quantum.openstack.common import context as req_context
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import log as logging
index b0b9e667568a3c9176621b8b911ea6f398c2a1d6..6d725f0160a8d149d081f5915d329022f1cfdf5f 100644 (file)
@@ -15,7 +15,8 @@
 
 '''messaging based notification driver, with message envelopes'''
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 from quantum.openstack.common import context as req_context
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import log as logging
index 9d0fede6ff66d127739ae847613d180241817ac2..bd10bb777d9102a26280cadc5c1a5f0038c9696c 100644 (file)
@@ -28,7 +28,8 @@ For some wrappers that add message versioning to rpc, see:
 import inspect
 import logging
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import importutils
 from quantum.openstack.common import local
index 4be74d651efd38baa19af8d1b21a15ef5a3e99d4..4377eaac50f494cb4b17427d7415fc4d904bfdf8 100644 (file)
@@ -21,7 +21,8 @@ import copy
 import sys
 import traceback
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import importutils
 from quantum.openstack.common import jsonutils
index 70c2b87ae2aa1c49f88004338b94e4100527b5e5..1635e166e1ebeca01748082fe355ee28971d5e38 100644 (file)
@@ -28,8 +28,8 @@ import kombu
 import kombu.connection
 import kombu.entity
 import kombu.messaging
+from oslo.config import cfg
 
-from quantum.openstack.common import cfg
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import network_utils
 from quantum.openstack.common.rpc import amqp as rpc_amqp
index 70b11d2147890bde3f83fef5781ce5e3b228ec81..689c9704e2ec90eb2d9f8cf3b402c59ec6d936ae 100644 (file)
@@ -22,8 +22,8 @@ import uuid
 
 import eventlet
 import greenlet
+from oslo.config import cfg
 
-from quantum.openstack.common import cfg
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import importutils
 from quantum.openstack.common import jsonutils
index 532708ab856fa3a2ba9ce92e51e6b2f175bbd3db..caa89c88ea7d6377f4b5a64358b84406b542a5cd 100644 (file)
@@ -23,8 +23,8 @@ import uuid
 
 import eventlet
 import greenlet
+from oslo.config import cfg
 
-from quantum.openstack.common import cfg
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import importutils
 from quantum.openstack.common import jsonutils
index 2d97ac5e691f17a329955d62e8964707d319693c..874e022ab1e7e29cf32e808cd3f00109894b3512 100644 (file)
@@ -22,7 +22,8 @@ import contextlib
 import itertools
 import json
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import log as logging
 
index d7025066271620156254eeeb7006361d8c92384c..3e8514475aedda5e86e43c0b9071087894fe6fc1 100644 (file)
@@ -28,8 +28,8 @@ import time
 
 import eventlet
 import logging as std_logging
+from oslo.config import cfg
 
-from quantum.openstack.common import cfg
 from quantum.openstack.common import eventlet_backdoor
 from quantum.openstack.common.gettextutils import _
 from quantum.openstack.common import importutils
index 8566e72099c9f9b10af65e2d85b013081f515ca6..dfb0b5c252d5ab61b9f669d56e073bd0e6c5e5e7 100644 (file)
@@ -50,6 +50,8 @@ import httplib
 import json
 import socket
 
+from oslo.config import cfg
+
 from quantum.common import constants as const
 from quantum.common import exceptions
 from quantum.common import rpc as q_rpc
@@ -61,7 +63,6 @@ from quantum.db import db_base_plugin_v2
 from quantum.db import dhcp_rpc_base
 from quantum.db import l3_db
 from quantum.extensions import l3
-from quantum.openstack.common import cfg
 from quantum.openstack.common import lockutils
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import rpc
index 6e1dd6156c20604ca7dca85c22778b49c0d8c307..9bd879cbe959621d59830acb5bc7320b6ed43039 100644 (file)
@@ -26,6 +26,9 @@
 """
 Implentation of Brocade Quantum Plugin.
 """
+
+from oslo.config import cfg
+
 from quantum.agent import securitygroups_rpc as sg_rpc
 from quantum.common import rpc as q_rpc
 from quantum.common import topics
@@ -38,7 +41,6 @@ from quantum.db import l3_rpc_base
 from quantum.db import securitygroups_rpc_base as sg_db_rpc
 from quantum.extensions import portbindings
 from quantum.extensions import securitygroup as ext_sg
-from quantum.openstack.common import cfg
 from quantum.openstack.common import context
 from quantum.openstack.common import importutils
 from quantum.openstack.common import log as logging
index 289fd2306f6846fe42d5152caefc5a08afa5e6ae..bf3cb6b4d90d5acef9f6ad6a5fd3e9a3cd32012d 100644 (file)
 
 import inspect
 import logging
-import mock
 import os
+
+import mock
+from oslo.config import cfg
 import webtest
 
 from quantum.api.extensions import PluginAwareExtensionManager
 from quantum.api.v2 import router
 from quantum.common import config
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.tests.unit import test_api_v2
 
 
index 81e50437f94bca75a85ac2e1c6534d8caede4407..3ce925551e03798616cd98e2995dbe2a4c9c2efd 100644 (file)
@@ -24,11 +24,12 @@ import re
 import sys
 import time
 
+from oslo.config import cfg
+
 from quantum.agent import rpc as agent_rpc
 from quantum.common import config as logging_config
 from quantum.common import topics
 from quantum import context
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common.rpc import dispatcher
 from quantum.plugins.hyperv.agent import utils
index 15829417fce35f279fd04769bf9f57f72308cbfa..84c318d6158d4e1d17a5b3e60c55c9d9dd384452 100644 (file)
@@ -21,8 +21,9 @@
 import sys
 import time
 
+from oslo.config import cfg
+
 from quantum.common import exceptions as q_exc
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 
 # Check needed for unit testing on Unix
index 10fd7580b6e5125cf3c296b30bf0cb1bbb3f3ff6..8f2fae99d4763207058d11134051588e837c259f 100644 (file)
@@ -16,6 +16,8 @@
 #    under the License.
 # @author: Alessandro Pilotti, Cloudbase Solutions Srl
 
+from oslo.config import cfg
+
 from quantum.api.v2 import attributes
 from quantum.common import exceptions as q_exc
 from quantum.common import topics
@@ -25,7 +27,6 @@ from quantum.db import l3_db
 from quantum.db import quota_db
 from quantum.extensions import portbindings
 from quantum.extensions import providernet as provider
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import rpc
 from quantum.plugins.hyperv import agent_notifier_api
index 11d849f0dce707847c03e5691e4c992fb8c0244f..96c9ac32c4a93163623b9531bf68fb1c7471b3de 100755 (executable)
@@ -27,6 +27,7 @@ import sys
 import time
 
 import eventlet
+from oslo.config import cfg
 import pyudev
 
 from quantum.agent.linux import ip_lib
@@ -37,7 +38,6 @@ from quantum.common import config as logging_config
 from quantum.common import topics
 from quantum.common import utils as q_utils
 from quantum import context
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common.rpc import dispatcher
 # NOTE (e0ne): this import is needed for config init
index af56d5b9c773a054538d5bfdb4e3ba990c31d225..43b1e68a313e3f7e233fc49d9117b35a316de1d0 100644 (file)
@@ -17,8 +17,9 @@
 # @author: Sumit Naiksatam, Cisco Systems, Inc.
 # @author: Rohit Agarwalla, Cisco Systems, Inc.
 
+from oslo.config import cfg
+
 from quantum.agent.common import config
-from quantum.openstack.common import cfg
 
 DEFAULT_VLAN_RANGES = []
 DEFAULT_INTERFACE_MAPPINGS = []
index b098284b1ad734ff586a78e38aa290f5b8dd88f8..668e319e2a0539138548a9439c281aa8efcfbed2 100644 (file)
@@ -15,6 +15,8 @@
 
 import sys
 
+from oslo.config import cfg
+
 from quantum.agent import securitygroups_rpc as sg_rpc
 from quantum.api.v2 import attributes
 from quantum.common import constants as q_const
@@ -33,7 +35,6 @@ from quantum.db import securitygroups_rpc_base as sg_db_rpc
 from quantum.extensions import portbindings
 from quantum.extensions import providernet as provider
 from quantum.extensions import securitygroup as ext_sg
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import rpc
 from quantum.openstack.common.rpc import proxy
index b92541c69195e7f126613bc661782db925ffc7d5..1fe8eb7901eaf7957aa8b016a6163db3f808f633 100644 (file)
@@ -15,7 +15,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
 
 
 meta_plugin_opts = [
index 15de8a9c84e8a54216f7299fbcca5bc430c3a094..ef173eede98a9ea78f38cb52eb891b3c15b603d0 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from oslo.config import cfg
+
 from quantum.common import exceptions as exc
 from quantum.db import api as db
 from quantum.db import db_base_plugin_v2
 from quantum.db import l3_db
 from quantum.db import models_v2
 from quantum.extensions.flavor import (FLAVOR_NETWORK, FLAVOR_ROUTER)
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum.openstack.common import log as logging
 # NOTE (e0ne): this import is needed for config init
index 9217b764683285f5f880badcb9d088b4d6452f91..48f3cb5b8b13591f23f5a4fcbcc02e9bf8dacdb7 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from oslo.config import cfg
+
 from quantum.db import api as db
 from quantum.db import db_base_plugin_v2
 from quantum.db import l3_db
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantumclient.common import exceptions
 from quantumclient.v2_0 import client
index e778251695323233cd0c6566007ff704915dd743..d2de49866b5aef51cfb0e37e230df72341b7deb2 100644 (file)
@@ -15,8 +15,9 @@
 #    under the License.
 # @author: Ryota MIBU
 
+from oslo.config import cfg
+
 from quantum.agent.common import config
-from quantum.openstack.common import cfg
 # import rpc config options
 from quantum.openstack.common import rpc
 
index cb510374c5225040e5e79deab1a097b4c02373c8..fe3bb6f92a1a886cfc439441df59e4c00519907c 100644 (file)
 # @author: Ryota MIBU
 #
 
+from oslo.config import cfg
+
 from quantum.api import extensions
 from quantum.api.v2 import attributes
 from quantum.api.v2 import base
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum import quota
 
 
index 83956d76d63fe404f663a286f04b27fa903ff78e..a8e2de004c283ee7f15d9e4e30405835d575265c 100644 (file)
@@ -23,6 +23,7 @@
 import hashlib
 import logging
 
+from oslo.config import cfg
 from sqlalchemy.orm import exc as sa_exc
 import webob.exc
 
@@ -45,7 +46,6 @@ from quantum.extensions import l3
 from quantum.extensions import portsecurity as psec
 from quantum.extensions import providernet as pnet
 from quantum.extensions import securitygroup as ext_sg
-from quantum.openstack.common import cfg
 from quantum.openstack.common import rpc
 from quantum.plugins.nicira.nicira_nvp_plugin.common import (securitygroups
                                                              as nvp_sec)
index d801b2eda2cc43e9447b54ee46ca00f9804107c4..fc98c7e8de9842601d006e57ae731768b0a73a6f 100644 (file)
@@ -14,8 +14,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from quantum.openstack.common import cfg
-
+from oslo.config import cfg
 
 core_opts = [
     cfg.BoolOpt('metadata_dhcp_host_route', default=False),
index 6123ab13a4433f73d2affef85d6f44ebdda84f0a..be34a86cbd2c4802856053aaef6179db81c2c7e2 100644 (file)
@@ -24,6 +24,7 @@ import sys
 import time
 
 import eventlet
+from oslo.config import cfg
 
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import ovs_lib
@@ -34,7 +35,6 @@ from quantum.common import config as logging_config
 from quantum.common import topics
 from quantum.common import utils as q_utils
 from quantum import context
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common.rpc import dispatcher
 from quantum.plugins.openvswitch.common import config
index 4ffe58841919b7c4ca284b2e52fcc27a72bfdc04..82f9c0b14315a857747dbdbfef698939b3487140 100644 (file)
@@ -14,8 +14,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from oslo.config import cfg
+
 from quantum.agent.common import config
-from quantum.openstack.common import cfg
 
 
 DEFAULT_BRIDGE_MAPPINGS = []
index 3485756a6f14dd604f67286f3ed1e7222ed3382b..c6984e9a32c36a071ee4c4263a2aaa42c7ee8807 100644 (file)
 
 from sqlalchemy.orm import exc
 
+from oslo.config import cfg
+
 from quantum.common import exceptions as q_exc
 import quantum.db.api as db
 from quantum.db import models_v2
 from quantum.db import securitygroups_db as sg_db
 from quantum.extensions import securitygroup as ext_sg
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.plugins.openvswitch.common import constants
 from quantum.plugins.openvswitch import ovs_models_v2
index ce489b744294ed0a78d8b0cdb2e09326b6c6bfa6..76754e7430d50f87511183dbebf6ea8f98788d90 100644 (file)
@@ -22,6 +22,8 @@
 
 import sys
 
+from oslo.config import cfg
+
 from quantum.agent import securitygroups_rpc as sg_rpc
 from quantum.api.v2 import attributes
 from quantum.common import constants as q_const
@@ -38,7 +40,6 @@ from quantum.db import securitygroups_rpc_base as sg_db_rpc
 from quantum.extensions import portbindings
 from quantum.extensions import providernet as provider
 from quantum.extensions import securitygroup as ext_sg
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import rpc
 from quantum.openstack.common.rpc import proxy
index 22e31f9626a4577d327034f0c8fec39b602d9de2..f3e299ab8cd74c496ddadf4873c7745b1b29c5c6 100644 (file)
@@ -23,9 +23,10 @@ to the Network Operating System by PLUMgrid called NOS
 
 import sys
 
+from oslo.config import cfg
+
 from quantum.db import api as db
 from quantum.db import db_base_plugin_v2
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.plugins.plumgrid.common import exceptions as plum_excep
 from quantum.plugins.plumgrid.plumgrid_nos_plugin import plumgrid_nos_snippets
index 4ac440380ad13ed480f336075401aed07816a3c6..dbcab7cb3fa57fc7c7e19b502b05ab6e4517675a 100755 (executable)
@@ -25,6 +25,7 @@ import socket
 import sys
 
 import netifaces
+from oslo.config import cfg
 from ryu.app import client
 from ryu.app import conf_switch_key
 from ryu.app import rest_nw_id
@@ -36,9 +37,6 @@ from quantum.common import config as logging_config
 from quantum.common import exceptions as q_exc
 from quantum.common import topics
 from quantum import context as q_context
-from quantum.openstack.common import cfg
-from quantum.openstack.common.cfg import NoSuchGroupError
-from quantum.openstack.common.cfg import NoSuchOptError
 from quantum.openstack.common import log
 from quantum.plugins.ryu.common import config
 
@@ -68,7 +66,7 @@ def _get_ip(cfg_ip_str, cfg_interface_str):
     ip = None
     try:
         ip = getattr(cfg.CONF.OVS, cfg_ip_str)
-    except (NoSuchOptError, NoSuchGroupError):
+    except (cfg.NoSuchOptError, cfg.NoSuchGroupError):
         pass
     if ip:
         return ip
@@ -76,7 +74,7 @@ def _get_ip(cfg_ip_str, cfg_interface_str):
     iface = None
     try:
         iface = getattr(cfg.CONF.OVS, cfg_interface_str)
-    except (NoSuchOptError, NoSuchGroupError):
+    except (cfg.NoSuchOptError, cfg.NoSuchGroupError):
         pass
     if iface:
         iface = netifaces.ifaddresses(iface)[netifaces.AF_INET][0]
index db2c19f2d00f14bbf08b7ff2fc60bcede9375476..e8bc99988089a7414ea52a2b6e3356515db178c1 100644 (file)
@@ -14,8 +14,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from oslo.config import cfg
+
 from quantum.agent.common import config
-from quantum.openstack.common import cfg
 
 
 ovs_opts = [
index fbb48f83517f6354c22b7364b497af0b615f6e11..8b09afb76bdc07a00ccbd535cca63133a8c89d5c 100644 (file)
@@ -16,6 +16,7 @@
 #    under the License.
 # @author: Isaku Yamahata
 
+from oslo.config import cfg
 from ryu.app import client
 from ryu.app import rest_nw_id
 
@@ -29,7 +30,6 @@ from quantum.db import dhcp_rpc_base
 from quantum.db import l3_db
 from quantum.db import l3_rpc_base
 from quantum.db import models_v2
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import rpc
 from quantum.plugins.ryu.common import config
index 84490132e2ffd57a2b73c8c4697f69cf7914c97d..f9dc76df20d85d9f5449b86d447c76adbb8d55f8 100644 (file)
 Policy engine for quantum.  Largely copied from nova.
 """
 
+from oslo.config import cfg
+
 from quantum.api.v2 import attributes
 from quantum.common import exceptions
 import quantum.common.utils as utils
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import policy
 
index ec08effcb662e9279800cd6eb831d5237f2b8478..217fdeec5f75e91e4e8d55e255a134f19401edaf 100644 (file)
@@ -16,8 +16,9 @@
 
 """Quotas for instances, volumes, and floating ips."""
 
+from oslo.config import cfg
+
 from quantum.common import exceptions
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum.openstack.common import log as logging
 
index 2f5ae0e076588a9508a56c337465002ea00e595b..69f339132021c1876f30e3c85629ae987c3e9ada 100755 (executable)
@@ -21,8 +21,9 @@
 
 import sys
 
+from oslo.config import cfg
+
 from quantum.common import config
-from quantum.openstack.common import cfg
 from quantum import service
 
 
index bb61aa6811600099f4532a2d22389deb2bc1a9b5..fa88c7bc657ac7d9f0b82c861396abe74f158320 100644 (file)
@@ -20,9 +20,10 @@ import logging as std_logging
 import os
 import random
 
+from oslo.config import cfg
+
 from quantum.common import config
 from quantum import context
-from quantum.openstack.common import cfg
 from quantum.openstack.common import importutils
 from quantum.openstack.common import log as logging
 from quantum.openstack.common import loopingcall
index 203b3cf3f798da53bbdad3a763e4354fe5ab2d5e..84a08f086fcd2eca4319eaf4b6d382c75df98044 100644 (file)
@@ -24,7 +24,7 @@ import unittest
 
 setattr(__builtin__, '_', lambda x: x)
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
 
 
 reldir = os.path.join(os.path.dirname(__file__), '..', '..', '..')
index b6891c15228b039e5dcbaa820ffe70b445a50162..15ed8ab6cbf5bcf241f3347878a2afde35b1ed57 100644 (file)
 
 import contextlib
 
+from oslo.config import cfg
+
 from quantum import context
 from quantum.extensions import portbindings
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.tests.unit import test_db_plugin
 
 
index e829eb85de6f002b52af79396652d5bc51de3827..52502737b2616121bc2796e2220931c40176faff 100644 (file)
 import os
 
 from mock import patch
+from oslo.config import cfg
 from webob import exc
 
 from quantum.common.test_lib import test_config
 from quantum.extensions import l3
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.openstack.common.notifier import api as notifier_api
 from quantum.openstack.common.notifier import test_notifier
 from quantum.tests.unit import test_l3_plugin
index 0349f04b2804e3e4bc770a9d0094ce2c4b554563..27453b4eda215398506f40bf3cdf39330ed07cd2 100644 (file)
@@ -17,6 +17,7 @@ import contextlib
 import logging
 import os
 
+from oslo.config import cfg
 import webob.exc
 
 from quantum.api.extensions import ExtensionMiddleware
@@ -29,7 +30,6 @@ from quantum.db import api as db
 import quantum.extensions
 from quantum.extensions import loadbalancer
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.plugins.common import constants
 from quantum.plugins.services.loadbalancer import loadbalancerPlugin
 from quantum.tests.unit import testlib_api
index f58fe232ff85fa74ad329a627cf6ecafc9f07616..53fee9772acc4a19db718196b53e72fe52db16c7 100644 (file)
@@ -23,9 +23,9 @@ Unit tests for Windows Hyper-V virtual switch quantum driver
 import sys
 
 import mock
+from oslo.config import cfg
 import unittest2 as unittest
 
-from quantum.openstack.common import cfg
 from quantum.plugins.hyperv.agent import hyperv_quantum_agent
 
 
index c6911b8855f8b162c2ad8c61fff22de89baa0781..8ebea7fe8840c9c400681ef94bf90591e1aea3ff 100644 (file)
 
 import contextlib
 
+from oslo.config import cfg
+
 from quantum import context
 from quantum.extensions import portbindings
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.tests.unit import test_db_plugin as test_plugin
 
 
index ac9840ffc0b08aacea64c714c6a478d89479a5c1..7c6457059c5e3b0b79f0dda2a0c9c82de70a11bb 100644 (file)
@@ -13,9 +13,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from oslo.config import cfg
 import unittest2 as unittest
 
-from quantum.openstack.common import cfg
 #NOTE this import loads tests required options
 from quantum.plugins.linuxbridge.common import config
 
index be394f13f47b178d6905ec5577ba9e7c7da624cb..8ce3fc4095937a8d525db7176e6fc5caaeebbc27 100644 (file)
@@ -15,9 +15,9 @@
 #    under the License.
 
 import mock
+from oslo.config import cfg
 import unittest2 as unittest
 
-from quantum.openstack.common import cfg
 from quantum.plugins.linuxbridge.agent import linuxbridge_quantum_agent
 from quantum.plugins.linuxbridge.common import constants as lconst
 
index 1f47eaee9999dd5e2e5f49ce93d1412131ea6a74..53480e277fcebbc6c5f3fedce0857715fa5c0769 100644 (file)
@@ -19,6 +19,7 @@ import os
 
 import mock
 import mox
+from oslo.config import cfg
 import stubout
 import unittest2 as unittest
 
@@ -26,7 +27,6 @@ from quantum import context
 from quantum.db import api as db
 from quantum.db import models_v2
 from quantum.extensions.flavor import (FLAVOR_NETWORK, FLAVOR_ROUTER)
-from quantum.openstack.common import cfg
 from quantum.openstack.common import uuidutils
 from quantum.plugins.metaplugin.meta_quantum_plugin import FlavorNotFound
 from quantum.plugins.metaplugin.meta_quantum_plugin import MetaPluginV2
index fabd0307162213a069f00507efdaf6e9005ea854..62a48ef2b8f3d38772a024b1b7da5d0457b2fb29 100644 (file)
@@ -15,7 +15,8 @@
 
 import unittest2 as unittest
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 from quantum.plugins.nicira.nicira_nvp_plugin.common import config
 
 
index 94375c59bf57872307e1d528066bdfd9bc013637..261120fc42d745c375b76ccc9e0756d0799ddc59 100644 (file)
@@ -18,6 +18,7 @@ import logging
 import os
 
 import mock
+from oslo.config import cfg
 import webob.exc
 
 import quantum.common.test_lib as test_lib
@@ -25,7 +26,6 @@ from quantum import context
 from quantum.extensions import providernet as pnet
 from quantum.extensions import securitygroup as secgrp
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.plugins.nicira.nicira_nvp_plugin.extensions import (nvp_qos
                                                                  as ext_qos)
 from quantum.plugins.nicira.nicira_nvp_plugin import nvplib
index 919863b92308758957aec603aede40c2a2b8d895..60c13e4f10241b25a6235e890739a3e0f0a566c4 100644 (file)
@@ -15,7 +15,8 @@
 
 import unittest
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
+
 #NOTE this import loads tests required options
 from quantum.plugins.openvswitch.common import config
 
index 675b5665d07d904653d2d839cf4749c789af4135..b11b4ce7e129ef7b6b77f3c7f1ffd50d24c9e920 100644 (file)
@@ -15,9 +15,9 @@
 #    under the License.
 
 import mock
+from oslo.config import cfg
 import unittest2 as unittest
 
-from quantum.openstack.common import cfg
 from quantum.plugins.openvswitch.agent import ovs_quantum_agent
 
 
index dcc1d0fd1543b71faae3ad0c8441f39f6f26e4e0..5571f8186593038e7aa02c8d041a92ade5f16a74 100644 (file)
 import unittest
 
 import mox
+from oslo.config import cfg
 
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import ovs_lib
 from quantum.agent.linux import utils
 from quantum.agent import rpc
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log
 from quantum.plugins.openvswitch.agent import ovs_quantum_agent
 from quantum.plugins.openvswitch.common import constants
index 7da846bcd37f95bc804a0a409df2070c55a553e8..53e5a959a1aeb35218bbec6647dd67a2ebbb20c1 100644 (file)
@@ -15,9 +15,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from oslo.config import cfg
 import unittest2
 
-from quantum.openstack.common import cfg
 #NOTE this import loads tests required options
 from quantum.plugins.ryu.common import config
 
index c93a8b15f9f5bda6eb6b71c67400e1863bca58f7..234e44cdc08efd3a86606a5a509de2f7a12a2f2c 100644 (file)
@@ -18,8 +18,9 @@
 from contextlib import nested
 import operator
 
+from oslo.config import cfg
+
 from quantum.db import api as db
-from quantum.openstack.common import cfg
 # NOTE: this import is needed for correct plugin code work
 from quantum.plugins.ryu.common import config
 from quantum.plugins.ryu.db import api_v2 as db_api_v2
index 2bf6254b29661be4c41f0366f4baadc3acbbd476..1bbd80d5bdb4c051f75932499aab0315cf6a535a 100644 (file)
 #    under the License.
 
 import mock
+from oslo.config import cfg
 import unittest2 as unittest
 
 from quantum.agent import netns_cleanup_util as util
-from quantum.openstack.common import cfg
 
 
 class TestNullDelegate(unittest.TestCase):
index b607a99aeb1a253bf7241f7b2b61435baea6ea4c..d5cfb64db3952acbcdb7ef9f54c6bc07d1d869bc 100644 (file)
 import contextlib
 import itertools
 import mock
+from oslo.config import cfg
 import unittest2 as unittest
 
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import ovs_lib
 from quantum.agent import ovs_cleanup_util as util
-from quantum.openstack.common import cfg
 from quantum.openstack.common import uuidutils
 
 
index de53ecfda8887fc0b8123b5464d41522ef446f08..e210d9d5d4e5d7550206c2201ebb14d943ef7aa9 100644 (file)
@@ -18,9 +18,9 @@
 import unittest
 
 import mock
+from oslo.config import cfg
 
 from quantum.agent import rpc
-from quantum.openstack.common import cfg
 from quantum.openstack.common import context
 
 
index db2b6d6454c255133642b112d879da4297c83159..95cd6d4a3a1a375953fbe666c0fe83ac65752fc7 100644 (file)
@@ -18,6 +18,7 @@
 import os
 
 import mock
+from oslo.config import cfg
 import unittest2 as unittest
 import webob
 from webob import exc
@@ -32,7 +33,6 @@ from quantum.common import constants
 from quantum.common import exceptions as q_exc
 from quantum import context
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.openstack.common.notifier import api as notifer_api
 from quantum.openstack.common import uuidutils
 from quantum.tests.unit import testlib_api
index 2960778c3c0235e82b4dc1609a6ffe69f84561bf..3f814a40cf738d5584452096919fa2f01e2ee344 100644 (file)
@@ -16,8 +16,9 @@
 import os
 import unittest
 
+from oslo.config import cfg
+
 from quantum.common import config
-from quantum.openstack.common import cfg
 
 
 class ConfigurationTest(unittest.TestCase):
index 1b8cc003f4e9c2cc42a3c683b393495cc5fc53cf..fad7b4d436fdc09e6e41bc19cc1ee2c9611098ee 100644 (file)
 
 """Test of DB API"""
 
-import unittest2 as unittest
-
 import mock
+from oslo.config import cfg
+import unittest2 as unittest
 
 import quantum.db.api as db
-from quantum.openstack.common import cfg
 
 
 class DBTestCase(unittest.TestCase):
index 48a85da2bb8985f25516ba0e7fd05ebc112de6d3..032ad06a2dd56c2f9052a768642fd28e341e0936 100644 (file)
@@ -22,6 +22,7 @@ import os
 import random
 
 import mock
+from oslo.config import cfg
 import sqlalchemy as sa
 import unittest2
 import webob.exc
@@ -39,7 +40,6 @@ from quantum.db import api as db
 from quantum.db import db_base_plugin_v2
 from quantum.db import models_v2
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import timeutils
 from quantum.tests.unit import test_extensions
 from quantum.tests.unit import testlib_api
index 0f5a4d340b43909dac8469a89aaf8d794c344715..0049d4e78e37743e6cd9a3be4977ea7a6ba6294e 100644 (file)
 import socket
 
 import mock
+from oslo.config import cfg
 import unittest2 as unittest
 
 from quantum.agent.common import config
 from quantum.agent.linux import interface
 from quantum.debug import commands
 from quantum.debug.debug_agent import DEVICE_OWNER_PROBE, QuantumDebugAgent
-from quantum.openstack.common import cfg
 
 
 class MyApp(object):
index 26b5bf89e969a02776dabc75770539b5ebf7a785..e04d350037c8847e64717184aab8c8006bae113d 100644 (file)
@@ -21,13 +21,13 @@ import sys
 import uuid
 
 import mock
+from oslo.config import cfg
 import unittest2 as unittest
 
 from quantum.agent.common import config
 from quantum.agent import dhcp_agent
 from quantum.agent.linux import interface
 from quantum.common import exceptions
-from quantum.openstack.common import cfg
 from quantum.openstack.common import jsonutils
 
 
index 62d46ced42c8a2a5fa2a333ab567fea274e1a9d3..2a63d07d98f10fedf2b6475d39dd18a2fc841613 100644 (file)
@@ -19,6 +19,7 @@
 Unit tests for extension extended attribute
 """
 
+from oslo.config import cfg
 import unittest2 as unittest
 import webob.exc as webexc
 
@@ -26,7 +27,6 @@ import quantum
 from quantum.api import extensions
 from quantum.common import config
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.plugins.common import constants
 from quantum.plugins.openvswitch import ovs_quantum_plugin
 from quantum.tests.unit.extensions import extendedattribute as extattr
index cc70b1f54de350f13d27058fea50c3126f258edd..4666264bc3313fac656ee9c4e78a38acab436635 100644 (file)
@@ -17,6 +17,7 @@ import contextlib
 import os
 
 import mock
+from oslo.config import cfg
 import webob.exc
 
 from quantum.api.v2 import attributes as attr
@@ -25,7 +26,6 @@ from quantum import context
 from quantum.db import db_base_plugin_v2
 from quantum.db import securitygroups_db
 from quantum.extensions import securitygroup as ext_sg
-from quantum.openstack.common import cfg
 from quantum.tests.unit import test_db_plugin
 
 DB_PLUGIN_KLASS = ('quantum.tests.unit.test_extension_security_group.'
index dcf3f466335c023aa70f19a809a937e9a76a7bbd..fbb3dfad6dd19e4bc3c92a36189afa52ec6a7f64 100644 (file)
@@ -19,13 +19,13 @@ import copy
 import unittest2
 
 import mock
+from oslo.config import cfg
 
 from quantum.agent import l3_agent
 from quantum.agent.common import config as agent_config
 from quantum.agent.linux import interface
 from quantum.common import config as base_config
 from quantum.common import constants as l3_constants
-from quantum.openstack.common import cfg
 from quantum.openstack.common import uuidutils
 
 
index e905b3dc017e51f8320f764119170ec7f907b1de..368a33373904b57fdc33dc24393ecd115b4f2d86 100644 (file)
@@ -24,6 +24,7 @@ import itertools
 import unittest2 as unittest
 
 import mock
+from oslo.config import cfg
 from webob import exc
 import webtest
 
@@ -40,7 +41,6 @@ from quantum.db import l3_rpc_agent_api
 from quantum.db import models_v2
 from quantum.extensions import l3
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.openstack.common.notifier import api as notifier_api
 from quantum.openstack.common.notifier import test_notifier
index 95ecd892c3b3e37807fbe3a2d2a77965e4e294ff..00950b2db876babab0e120e9b98e01d182708533 100644 (file)
@@ -20,10 +20,10 @@ import socket
 import unittest2 as unittest
 
 import mock
+from oslo.config import cfg
 
 from quantum.agent.common import config
 from quantum.agent.linux import dhcp
-from quantum.openstack.common import cfg
 from quantum.openstack.common import jsonutils
 
 
index 4f5007f22f0a2b46b3dcff807c4da8e7a95b0b3f..97d03936cbbeb9eda01db6c0cc646e915aa20c09 100644 (file)
@@ -18,6 +18,7 @@
 import unittest
 
 import mock
+from oslo.config import cfg
 
 from quantum.agent.common import config
 from quantum.agent.dhcp_agent import DeviceManager
@@ -25,7 +26,6 @@ from quantum.agent.linux import interface
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import utils
 from quantum.extensions.flavor import (FLAVOR_NETWORK)
-from quantum.openstack.common import cfg
 
 
 class BaseChild(interface.LinuxInterfaceDriver):
index 172c271402a1cd7dda1b87f41f62cda229da4f9f..e5fb94fe926d7d0f8123d6312ad90cd1a2906817 100644 (file)
@@ -17,6 +17,7 @@
 import copy
 
 import mock
+from oslo.config import cfg
 import unittest2
 from webob import exc
 import webtest
@@ -26,7 +27,6 @@ from quantum.api.v2 import attributes
 from quantum.common import config
 from quantum.extensions import loadbalancer
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import uuidutils
 from quantum.plugins.common import constants
 from quantum.tests.unit import test_api_v2
index 120d2174e84ff5fbb2efc8cee82a682419d1b1ed..990e06e5ef408a03fca9504552db24c5014f4b92 100644 (file)
@@ -19,10 +19,11 @@ import os
 import types
 import unittest2
 
+from oslo.config import cfg
+
 from quantum.common import config
 from quantum.common.test_lib import test_config
 from quantum.manager import QuantumManager
-from quantum.openstack.common import cfg
 from quantum.openstack.common import log as logging
 from quantum.plugins.common import constants
 from quantum.tests.unit import dummy_plugin
index fa13b11a3f7660d8a3c76a370a8e0f571a91305f..321c1843261ff599b20411cc26c55e6148501c86 100644 (file)
@@ -2,6 +2,7 @@ import unittest2 as unittest
 import webtest
 
 import mock
+from oslo.config import cfg
 
 from quantum.api import extensions
 from quantum.api.v2 import attributes
@@ -10,7 +11,6 @@ from quantum.common import exceptions
 from quantum import context
 from quantum.db import api as db
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.plugins.linuxbridge.db import l2network_db_v2
 from quantum import quota
 from quantum.tests.unit import test_api_v2
index 34177ef3bc48f15ac6856c8d91cdbe51d8039806..f955ca9c61fe42013d21148fdb88ca80727dab86 100644 (file)
@@ -21,6 +21,7 @@ from mock import call
 import unittest2 as unittest
 
 import mox
+from oslo.config import cfg
 
 from quantum.agent import firewall as firewall_base
 from quantum.agent.linux import iptables_manager
@@ -29,7 +30,6 @@ from quantum.agent import securitygroups_rpc as sg_rpc
 from quantum import context
 from quantum.db import securitygroups_rpc_base as sg_db_rpc
 from quantum.extensions import securitygroup as ext_sg
-from quantum.openstack.common import cfg
 from quantum.openstack.common.rpc import proxy
 from quantum.tests.unit import test_extension_security_group as test_sg
 from quantum.tests.unit import test_iptables_firewall as test_fw
index 78d7e28becdb73bea8d7555a17d4f8717f08c6e7..bfac2c8b4eb150385a1b3e79df2d5fa85a4b410e 100644 (file)
@@ -22,6 +22,7 @@ import logging
 import unittest2 as unittest
 
 import mock
+from oslo.config import cfg
 import webob.exc as webexc
 import webtest
 
@@ -32,7 +33,6 @@ from quantum.db import api as db_api
 from quantum.db import servicetype_db
 from quantum.extensions import servicetype
 from quantum import manager
-from quantum.openstack.common import cfg
 from quantum.plugins.common import constants
 from quantum.tests.unit import dummy_plugin as dp
 from quantum.tests.unit import test_api_v2
index 8dfc4cf0125b31fd26e433ac41619e68e6d3258d..38b413cd825ad33afdd38d1f1d18a11777b25b74 100644 (file)
@@ -32,7 +32,7 @@ if os.path.exists(os.path.join(possible_topdir, "quantum",
     sys.path.insert(0, possible_topdir)
 
 
-from quantum.openstack.common import cfg
+from oslo.config import cfg
 
 
 class InstallVenv(object):
index ee1136de47c7889abdef6f399482a1b3049d6b53..1f91e1ec17118d3ed531e7bd1ee95a1c004aa26c 100644 (file)
@@ -16,6 +16,7 @@ sqlalchemy==0.7.9
 WebOb>=1.2
 python-keystoneclient>=0.2.0
 alembic>=0.4.1
+http://tarballs.openstack.org/oslo-config/oslo-config-2013.1b3.tar.gz#egg=oslo-config
 
 # Cisco plugin dependencies
 python-novaclient
diff --git a/tox.ini b/tox.ini
index e3b17ecdb17edb4beb4ae6eaeb5a7553f875a2ab..45261b2f0bf45f22fe54655cca80cf4a72fcbc2d 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -19,8 +19,6 @@ sitepackages = True
 downloadcache = ~/cache/pip
 
 [testenv:pep8]
-deps = pep8
-       setuptools_git>=0.4
 commands =
   pep8 --repeat --show-source --ignore=E125 --exclude=.venv,.tox,dist,doc,openstack,*egg .
   pep8 --repeat --show-source --ignore=E125 --filename=quantum* bin