Allow CLI opts to override auth token and endpoint

Previously, both --os-auth-token and --os-image-url had to be
provided in order for either of them to be used in any API requests.
This breaks the tie between them and allows a user to override
either the auth token or the endpoint returned by Keystone independently
of one another.

Fixes bug 1029586

Change-Id: I8b81be723286c546d9cbd97c8b7d7aa89c03b2d4
This commit is contained in:
Brian Waldon 2012-07-26 16:10:42 -07:00
parent ba83562b24
commit 2541f3ce84

@ -193,7 +193,7 @@ class OpenStackImagesShell(object):
endpoint = '/'.join(url_bits[:-1])
return endpoint
def _authenticate(self, **kwargs):
def _get_ksclient(self, **kwargs):
"""Get an endpoint and auth token from Keystone.
:param username: name of user
@ -202,19 +202,19 @@ class OpenStackImagesShell(object):
:param tenant_name: name of tenant
:param auth_url: endpoint to authenticate against
"""
_ksclient = ksclient.Client(username=kwargs.get('username'),
password=kwargs.get('password'),
tenant_id=kwargs.get('tenant_id'),
tenant_name=kwargs.get('tenant_name'),
auth_url=kwargs.get('auth_url'),
insecure=kwargs.get('insecure'))
service_type = kwargs.get('service_type') or 'image'
endpoint_type = kwargs.get('endpoint_type') or 'publicURL'
endpoint = _ksclient.service_catalog.url_for(
service_type=service_type,
endpoint_type=endpoint_type)
endpoint = self._strip_version(endpoint)
return (endpoint, _ksclient.auth_token)
return ksclient.Client(username=kwargs.get('username'),
password=kwargs.get('password'),
tenant_id=kwargs.get('tenant_id'),
tenant_name=kwargs.get('tenant_name'),
auth_url=kwargs.get('auth_url'),
insecure=kwargs.get('insecure'))
def _get_endpoint(self, client, **kwargs):
"""Get an endpoint using the provided keystone client."""
endpoint = client.service_catalog.url_for(
service_type=kwargs.get('service_type') or 'image',
endpoint_type=kwargs.get('endpoint_type') or 'publicURL')
return self._strip_version(endpoint)
def main(self, argv):
# Parse args once to find version
@ -276,7 +276,11 @@ class OpenStackImagesShell(object):
'endpoint_type': args.os_endpoint_type,
'insecure': args.insecure
}
endpoint, token = self._authenticate(**kwargs)
_ksclient = self._get_ksclient(**kwargs)
token = args.os_auth_token or _ksclient.auth_token
endpoint = args.os_image_url or \
self._get_endpoint(_ksclient, **kwargs)
client = glanceclient.Client(api_version,
endpoint,