Add Identity to ClientManager
* Make the Identity client in identity.client.make_client() * Auth via ClientManager.identity * Skip extra auth roundtrip in compute client Change-Id: I0190639e38f83997c233195f6cc27ff3afdfba10
This commit is contained in:
parent
5e4032150d
commit
70b3246a19
@ -5,8 +5,7 @@ import logging
|
||||
|
||||
from openstackclient.common import exceptions as exc
|
||||
from openstackclient.compute import client as compute_client
|
||||
|
||||
from keystoneclient.v2_0 import client as keystone_client
|
||||
from openstackclient.identity import client as identity_client
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@ -31,6 +30,9 @@ class ClientManager(object):
|
||||
"""Manages access to API clients, including authentication.
|
||||
"""
|
||||
|
||||
# Identity client is instantiated in init_token()
|
||||
# otherwise we have a recursion problem
|
||||
identity = None
|
||||
compute = ClientCache(compute_client.make_client)
|
||||
|
||||
def __init__(self, token=None, url=None,
|
||||
@ -82,15 +84,11 @@ class ClientManager(object):
|
||||
"You must provide an auth url via"
|
||||
" either --os-auth-url or via env[OS_AUTH_URL]")
|
||||
|
||||
kwargs = {
|
||||
'username': self._username,
|
||||
'password': self._password,
|
||||
'tenant_id': self._tenant_id,
|
||||
'tenant_name': self._tenant_name,
|
||||
'auth_url': self._auth_url
|
||||
}
|
||||
self._auth_client = keystone_client.Client(**kwargs)
|
||||
self._token = self._auth_client.auth_token
|
||||
# Get an Identity client and keep a token and catalog
|
||||
if not self.identity:
|
||||
self.identity = identity_client.make_client(self)
|
||||
self._token = self.identity.auth_token
|
||||
self._service_catalog = self.identity.service_catalog
|
||||
return
|
||||
|
||||
def get_endpoint_for_service_type(self, service_type):
|
||||
@ -98,8 +96,8 @@ class ClientManager(object):
|
||||
"""
|
||||
# See if we are using password flow auth, i.e. we have a
|
||||
# service catalog to select endpoints from
|
||||
if self._auth_client and self._auth_client.service_catalog:
|
||||
endpoint = self._auth_client.service_catalog.url_for(
|
||||
if self._service_catalog:
|
||||
endpoint = self._service_catalog.url_for(
|
||||
service_type=service_type)
|
||||
else:
|
||||
# Hope we were given the correct URL.
|
||||
|
@ -9,8 +9,6 @@ def make_client(instance):
|
||||
"""Returns a compute service client.
|
||||
"""
|
||||
LOG.debug('instantiating compute client')
|
||||
# FIXME(dhellmann): Where is the endpoint value used?
|
||||
# url = instance.get_endpoint_for_service_type('compute')
|
||||
client = nova_client.Client(
|
||||
version=instance._compute_api_version,
|
||||
username=instance._username,
|
||||
@ -28,5 +26,10 @@ def make_client(instance):
|
||||
# FIXME(dhellmann): what is service_name?
|
||||
service_name='',
|
||||
)
|
||||
client.authenticate()
|
||||
|
||||
# Populate the Nova client to skip another auth query to Identity
|
||||
client.client.management_url = instance.get_endpoint_for_service_type(
|
||||
'compute')
|
||||
client.client.service_catalog = instance._service_catalog
|
||||
client.client.auth_token = instance._token
|
||||
return client
|
||||
|
20
openstackclient/identity/client.py
Normal file
20
openstackclient/identity/client.py
Normal file
@ -0,0 +1,20 @@
|
||||
import logging
|
||||
|
||||
from keystoneclient.v2_0 import client as identity_client
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def make_client(instance):
|
||||
"""Returns an identity service client.
|
||||
"""
|
||||
LOG.debug('instantiating identity client')
|
||||
client = identity_client.Client(
|
||||
username=instance._username,
|
||||
password=instance._password,
|
||||
tenant_name=instance._tenant_name,
|
||||
tenant_id=instance._tenant_id,
|
||||
auth_url=instance._auth_url,
|
||||
region_name=instance._region_name,
|
||||
)
|
||||
return client
|
@ -6,4 +6,5 @@ mock
|
||||
prettytable
|
||||
simplejson
|
||||
-e git://github.com/openstack/python-keystoneclient.git#egg=python-keystoneclient
|
||||
-e git+https://github.com/openstack/python-novaclient.git#egg=python_novaclient
|
||||
-e git+https://github.com/openstack/python-novaclient.git#egg=python_novaclient
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user