Merge "Support ceilometer-url and os-endpoint"
This commit is contained in:
@@ -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'),
|
||||
|
||||
@@ -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 "
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user