Merge "Support ceilometer-url and os-endpoint"

This commit is contained in:
Jenkins
2015-01-09 14:37:18 +00:00
committed by Gerrit Code Review
4 changed files with 50 additions and 25 deletions

View File

@@ -153,12 +153,11 @@ class AuthPlugin(auth.BaseAuthPlugin):
super(AuthPlugin, self).__init__(auth_system, **kwargs)
def _do_authenticate(self, http_client):
if self.opts.get('token') and self.opts.get('endpoint'):
token = self.opts.get('token')
endpoint = self.opts.get('endpoint')
else:
project_id = self.opts.get('project_id') \
or self.opts.get('tenant_id')
token = self.opts.get('token') or self.opts.get('auth_token')
endpoint = self.opts.get('endpoint')
if not (token and endpoint):
project_id = (self.opts.get('project_id') or
self.opts.get('tenant_id'))
project_name = (self.opts.get('project_name') or
self.opts.get('tenant_name'))
ks_kwargs = {
@@ -183,8 +182,8 @@ class AuthPlugin(auth.BaseAuthPlugin):
# retrieve session
ks_session = _get_keystone_session(**ks_kwargs)
token = lambda: ks_session.get_token()
endpoint = self.opts.get('endpoint') or \
_get_endpoint(ks_session, **ks_kwargs)
endpoint = (self.opts.get('endpoint') or
_get_endpoint(ks_session, **ks_kwargs))
self.opts['token'] = token
self.opts['endpoint'] = endpoint
@@ -199,14 +198,13 @@ class AuthPlugin(auth.BaseAuthPlugin):
:raises: AuthPluginOptionsMissing
"""
missing = not ((self.opts.get('token') and
self.opts.get('endpoint')) or
(self.opts.get('username')
and self.opts.get('password')
and self.opts.get('auth_url') and
(self.opts.get('tenant_id')
or self.opts.get('tenant_name'))))
has_token = self.opts.get('token') or self.opts.get('auth_token')
no_auth = has_token and self.opts.get('endpoint')
has_tenant = self.opts.get('tenant_id') or self.opts.get('tenant_name')
has_credential = (self.opts.get('username') and has_tenant
and self.opts.get('password')
and self.opts.get('auth_url'))
missing = not (no_auth or has_credential)
if missing:
missing_opts = []
opts = ['token', 'endpoint', 'username', 'password', 'auth_url',
@@ -220,6 +218,7 @@ class AuthPlugin(auth.BaseAuthPlugin):
def Client(version, *args, **kwargs):
module = utils.import_versioned_module(version, 'client')
client_class = getattr(module, 'Client')
kwargs['token'] = kwargs.get('token') or kwargs.get('auth_token')
return client_class(*args, **kwargs)
@@ -230,8 +229,12 @@ def get_client(version, **kwargs):
:param api_version: the API version to use ('1' or '2')
:param kwargs: keyword args containing credentials, either:
* os_auth_token: pre-existing token to re-use
* ceilometer_url: ceilometer API endpoint
* os_auth_token: (DEPRECATED) pre-existing token to re-use,
use os_token instead
* os_token: pre-existing token to re-use
* ceilometer_url: (DEPRECATED) Ceilometer API endpoint,
use os_endpoint instead
* os_endpoint: Ceilometer API endpoint
or:
* os_username: name of user
* os_password: user's password
@@ -249,7 +252,7 @@ def get_client(version, **kwargs):
* os_key: SSL private key
* insecure: allow insecure SSL (no cert verification)
"""
endpoint = kwargs.get('ceilometer_url')
endpoint = kwargs.get('os_endpoint') or kwargs.get('ceilometer_url')
cli_kwargs = {
'username': kwargs.get('os_username'),
@@ -263,7 +266,7 @@ def get_client(version, **kwargs):
'cacert': kwargs.get('os_cacert'),
'cert_file': kwargs.get('os_cert'),
'key_file': kwargs.get('os_key'),
'token': kwargs.get('os_auth_token'),
'token': kwargs.get('os_token') or kwargs.get('os_auth_token'),
'user_domain_name': kwargs.get('os_user_domain_name'),
'user_domain_id': kwargs.get('os_user_domain_id'),
'project_domain_name': kwargs.get('os_project_domain_name'),

View File

@@ -81,11 +81,14 @@ class CeilometerShell(object):
type=_positive_non_zero_int,
help='Number of seconds to wait for a response.')
parser.add_argument('--ceilometer-url',
parser.add_argument('--ceilometer-url', metavar='<CEILOMETER_URL>',
dest='os_endpoint',
default=cliutils.env('CEILOMETER_URL'),
help='Defaults to env[CEILOMETER_URL].')
help=("DEPRECATED, use --os-endpoint instead. "
"Defaults to env[CEILOMETER_URL]."))
parser.add_argument('--ceilometer_url',
dest='os_endpoint',
help=argparse.SUPPRESS)
parser.add_argument('--ceilometer-api-version',
@@ -155,7 +158,7 @@ class CeilometerShell(object):
def parse_args(self, argv):
# Parse args once to find version
self.auth_plugin = ceiloclient.AuthPlugin(argv)
self.auth_plugin = ceiloclient.AuthPlugin()
parser = self.get_base_parser()
(options, args) = parser.parse_known_args(argv)
self.auth_plugin.parse_opts(options)
@@ -198,7 +201,9 @@ class CeilometerShell(object):
self.do_bash_completion(args)
return 0
if not (self.auth_plugin.opts['auth_token'] and args.ceilometer_url):
if not ((self.auth_plugin.opts.get('token')
or self.auth_plugin.opts.get('auth_token'))
and self.auth_plugin.opts['endpoint']):
if not self.auth_plugin.opts['username']:
raise exc.CommandError("You must provide a username via "
"either --os-username or via "

View File

@@ -205,3 +205,21 @@ class ShellInsecureTest(ShellTestBase):
args = ['--debug', '--os-insecure', 'false', 'alarm-list']
self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
mocked_session.assert_called_with(verify=True, cert='')
class ShellEndpointTest(ShellTestBase):
@mock.patch('ceilometerclient.v2.client.Client')
def _test_endpoint_and_token(self, token_name, endpoint_name, mocked):
args = ['--debug', token_name, 'fake-token',
endpoint_name, 'http://fake-url', 'alarm-list']
self.assertEqual(None, ceilometer_shell.main(args))
args, kwargs = mocked.call_args
self.assertEqual('http://fake-url', kwargs.get('endpoint'))
self.assertEqual('fake-token', kwargs.get('token'))
def test_endpoint_and_token(self):
self._test_endpoint_and_token('--os-auth-token', '--ceilometer-url')
self._test_endpoint_and_token('--os-auth-token', '--os-endpoint')
self._test_endpoint_and_token('--os-token', '--ceilometer-url')
self._test_endpoint_and_token('--os-token', '--os-endpoint')

View File

@@ -45,7 +45,6 @@ class Client(object):
"""
def __init__(self, *args, **kwargs):
"""Initialize a new client for the Ceilometer v2 API."""
self.auth_plugin = kwargs.get('auth_plugin') \
or ceiloclient.get_auth_plugin(*args, **kwargs)