diff options
Diffstat (limited to 'nova/network/quantumv2')
-rw-r--r-- | nova/network/quantumv2/__init__.py | 59 | ||||
-rw-r--r-- | nova/network/quantumv2/api.py | 8 |
2 files changed, 26 insertions, 41 deletions
diff --git a/nova/network/quantumv2/__init__.py b/nova/network/quantumv2/__init__.py index 89c08311f..6d6e7c7bc 100644 --- a/nova/network/quantumv2/__init__.py +++ b/nova/network/quantumv2/__init__.py @@ -16,7 +16,9 @@ # under the License. from oslo.config import cfg -from quantumclient.v2_0 import client +from quantumclient import client +from quantumclient.common import exceptions +from quantumclient.v2_0 import client as clientv20 from nova.openstack.common import excutils from nova.openstack.common import log as logging @@ -25,24 +27,27 @@ CONF = cfg.CONF LOG = logging.getLogger(__name__) -cached_admin_client = None - - -def _fill_admin_details(params): - params['username'] = CONF.quantum_admin_username - params['tenant_name'] = CONF.quantum_admin_tenant_name - params['region_name'] = CONF.quantum_region_name - params['password'] = CONF.quantum_admin_password - params['auth_url'] = CONF.quantum_admin_auth_url - params['timeout'] = CONF.quantum_url_timeout - params['auth_strategy'] = CONF.quantum_auth_strategy - params['insecure'] = CONF.quantum_api_insecure +def _get_auth_token(): + try: + httpclient = client.HTTPClient( + username=CONF.quantum_admin_username, + tenant_name=CONF.quantum_admin_tenant_name, + region_name=CONF.quantum_region_name, + password=CONF.quantum_admin_password, + auth_url=CONF.quantum_admin_auth_url, + timeout=CONF.quantum_url_timeout, + auth_strategy=CONF.quantum_auth_strategy, + insecure=CONF.quantum_api_insecure) + httpclient.authenticate() + return httpclient.auth_token + except exceptions.QuantumClientException as e: + with excutils.save_and_reraise_exception(): + LOG.error(_('Quantum client authentication failed: %s'), e) def _get_client(token=None): - global cached_admin_client - - should_cache = False + if not token and CONF.quantum_auth_strategy: + token = _get_auth_token() params = { 'endpoint_url': CONF.quantum_url, 'timeout': CONF.quantum_url_timeout, @@ -51,30 +56,12 @@ def _get_client(token=None): if token: params['token'] = token else: - if CONF.quantum_auth_strategy: - should_cache = True - _fill_admin_details(params) - else: - params['auth_strategy'] = None - - new_client = client.Client(**params) - if should_cache: - # in this case, we don't have the token yet - try: - new_client.httpclient.authenticate() - except Exception: - with excutils.save_and_reraise_exception(): - LOG.exception(_("quantum authentication failed")) - - cached_admin_client = new_client - return new_client + params['auth_strategy'] = None + return clientv20.Client(**params) def get_client(context, admin=False): if admin: - if cached_admin_client is not None: - return cached_admin_client - token = None else: token = context.auth_token diff --git a/nova/network/quantumv2/api.py b/nova/network/quantumv2/api.py index 054611cd3..c7f4ffd58 100644 --- a/nova/network/quantumv2/api.py +++ b/nova/network/quantumv2/api.py @@ -33,8 +33,6 @@ from nova.openstack.common import excutils from nova.openstack.common import log as logging from nova.openstack.common import uuidutils -import quantumclient.common.exceptions - quantum_opts = [ cfg.StrOpt('quantum_url', default='http://127.0.0.1:9696', @@ -325,7 +323,7 @@ class API(base.Base): for port in ports: try: quantumv2.get_client(context).delete_port(port['id']) - except Exception as ex: + except Exception: LOG.exception(_("Failed to delete quantum port %(portid)s ") % {'portid': port['id']}) @@ -540,7 +538,7 @@ class API(base.Base): def get_all(self, context): """Get all networks for client.""" client = quantumv2.get_client(context) - networks = client.list_networks().get('networks') or {} + networks = client.list_networks().get('networks') for network in networks: network['label'] = network['name'] return networks @@ -723,7 +721,7 @@ class API(base.Base): port_id=port) # If a quantum plugin does not implement the L3 API a 404 from # list_floatingips will be raised. - except quantumclient.common.exceptions.QuantumClientException as e: + except quantumv2.exceptions.QuantumClientException as e: if e.status_code == 404: return [] raise |