switch to keystoneauth

move troveclient to keystoneauth as keystoneclient's auth session,
plugins and adapter code has been deprecated.

Change-Id: I3d57dde9c013038accbab8cc30d9622a142d0f71
This commit is contained in:
Steve Martinelli 2016-03-09 23:06:50 -05:00 committed by Steve Martinelli
parent 286df261cb
commit fff88e0a9c
5 changed files with 72 additions and 69 deletions

@ -7,7 +7,7 @@ requests>=2.10.0 # Apache-2.0
simplejson>=2.2.0 # MIT
oslo.i18n>=2.1.0 # Apache-2.0
oslo.utils>=3.5.0 # Apache-2.0
python-keystoneclient!=1.8.0,!=2.1.0,>=1.7.0 # Apache-2.0
Babel>=2.3.4 # BSD
keystoneauth1>=2.1.0 # Apache-2.0
six>=1.9.0 # MIT
python-swiftclient>=2.2.0 # Apache-2.0

@ -24,7 +24,7 @@ from __future__ import print_function
import logging
import requests
from keystoneclient import adapter
from keystoneauth1 import adapter
from oslo_utils import importutils
from troveclient import exceptions
from troveclient.openstack.common.apiclient import client

@ -33,10 +33,9 @@ import sys
import pkg_resources
import six
from keystoneclient.auth.identity.generic import password
from keystoneclient.auth.identity.generic import token
from keystoneclient.auth.identity import v3 as identity
from keystoneclient import session as ks_session
from keystoneauth1.identity.generic import password
from keystoneauth1.identity.generic import token
from keystoneauth1 import loading
from oslo_utils import encodeutils
from oslo_utils import importutils
@ -91,7 +90,7 @@ class TroveClientArgumentParser(argparse.ArgumentParser):
class OpenStackTroveShell(object):
def get_base_parser(self):
def get_base_parser(self, argv):
parser = TroveClientArgumentParser(
prog='trove',
description=__doc__.strip(),
@ -120,7 +119,8 @@ class OpenStackTroveShell(object):
parser.add_argument('--os-auth-system',
metavar='<auth-system>',
default=utils.env('OS_AUTH_SYSTEM'),
help='Defaults to env[OS_AUTH_SYSTEM].')
help=argparse.SUPPRESS)
parser.add_argument('--os_auth_system',
help=argparse.SUPPRESS)
@ -207,42 +207,43 @@ class OpenStackTroveShell(object):
'on the server side. '
'Defaults to env[OS_PROFILE_HMACKEY].')
self._append_global_identity_args(parser)
self._append_global_identity_args(parser, argv)
# The auth-system-plugins might require some extra options
troveclient.auth_plugin.load_auth_system_opts(parser)
return parser
def _append_global_identity_args(self, parser):
def _append_global_identity_args(self, parser, argv):
# Register CLI identity related arguments
# Use Keystoneclient API to register common V3 CLI arguments
ks_session.Session.register_cli_options(parser)
identity.Password.register_argparse_arguments(parser)
# Use keystoneauth to register common CLI arguments
loading.register_session_argparse_arguments(parser)
default_auth_plugin = 'password'
if 'os-token' in argv:
default_auth_plugin = 'token'
loading.register_auth_argparse_arguments(parser, argv,
default=default_auth_plugin)
parser.set_defaults(insecure=utils.env('TROVECLIENT_INSECURE',
default=False))
parser.add_argument('--os-tenant-name',
metavar='<auth-tenant-name>',
default=utils.env('OS_TENANT_NAME'),
help='Tenant to request authorization on. '
'Defaults to env[OS_TENANT_NAME].')
parser.set_defaults(os_auth_url=utils.env('OS_AUTH_URL'))
parser.set_defaults(os_project_name=utils.env(
'OS_PROJECT_NAME', 'OS_TENANT_NAME'))
parser.set_defaults(os_project_id=utils.env(
'OS_PROJECT_ID', 'OS_TENANT_ID'))
parser.add_argument('--os_tenant_name',
help=argparse.SUPPRESS)
parser.add_argument('--os-tenant-id',
metavar='<tenant-id>',
default=utils.env('OS_TENANT_ID'),
help='Tenant to request authorization on. '
'Defaults to env[OS_TENANT_ID].')
parser.add_argument('--os_tenant_id',
help=argparse.SUPPRESS)
parser.add_argument('--os-auth-token',
default=utils.env('OS_AUTH_TOKEN'),
help='Defaults to env[OS_AUTH_TOKEN]')
help=argparse.SUPPRESS)
parser.add_argument('--os-region-name',
metavar='<region-name>',
@ -252,8 +253,8 @@ class OpenStackTroveShell(object):
parser.add_argument('--os_region_name',
help=argparse.SUPPRESS)
def get_subcommand_parser(self, version):
parser = self.get_base_parser()
def get_subcommand_parser(self, version, argv):
parser = self.get_base_parser(argv)
self.subcommands = {}
subparsers = parser.add_subparsers(metavar='<subcommand>')
@ -367,7 +368,7 @@ class OpenStackTroveShell(object):
def main(self, argv):
# Parse args once to find version and debug settings
parser = self.get_base_parser()
parser = self.get_base_parser(argv)
(options, args) = parser.parse_known_args(argv)
self.setup_debugging(options.debug)
self.options = options
@ -381,7 +382,7 @@ class OpenStackTroveShell(object):
self._run_extension_hooks('__pre_parse_args__')
subcommand_parser = self.get_subcommand_parser(
options.os_database_api_version)
options.os_database_api_version, argv)
self.parser = subcommand_parser
if options.help or not argv:
@ -401,11 +402,22 @@ class OpenStackTroveShell(object):
os_username = args.os_username
os_password = args.os_password
os_tenant_name = args.os_tenant_name
os_project_name = getattr(args, 'os_project_name',
getattr(args, 'os_tenant_name', None))
os_auth_url = args.os_auth_url
os_region_name = args.os_region_name
os_tenant_id = args.os_tenant_id
os_project_id = getattr(
args, 'os_project_id',
getattr(args, 'os_tenant_id', None))
os_auth_system = args.os_auth_system
if "v2.0" not in os_auth_url:
if (not args.os_project_domain_id and
not args.os_project_domain_name):
setattr(args, "os_project_domain_id", "default")
if not args.os_user_domain_id and not args.os_user_domain_name:
setattr(args, "os_user_domain_id", "default")
endpoint_type = args.endpoint_type
insecure = args.insecure
service_type = args.service_type
@ -448,20 +460,14 @@ class OpenStackTroveShell(object):
os_auth_url = auth_plugin.get_auth_url()
# V3 stuff
project_info_provided = (self.options.os_tenant_name or
self.options.os_tenant_id or
(self.options.os_project_name and
(self.options.os_project_domain_name or
self.options.os_project_domain_id)) or
project_info_provided = (self.options.os_project_name or
self.options.os_project_id)
if (not project_info_provided):
raise exc.CommandError(
_("You must provide a tenant_name, tenant_id, "
_("You must provide a "
"project_id or project_name (with "
"project_domain_name or project_domain_id) via "
" --os-tenant-name (env[OS_TENANT_NAME]),"
" --os-tenant-id (env[OS_TENANT_ID]),"
" --os-project-id (env[OS_PROJECT_ID])"
" --os-project-name (env[OS_PROJECT_NAME]),"
" --os-project-domain-id "
@ -481,36 +487,35 @@ class OpenStackTroveShell(object):
if auth_plugin or bypass_url:
use_session = False
keystone_session = None
ks_session = None
keystone_auth = None
if use_session:
project_id = args.os_project_id or args.os_tenant_id
project_name = args.os_project_name or args.os_tenant_name
project_id = args.os_project_id or args.os_tenant_id
project_name = args.os_project_name or args.os_tenant_name
keystone_session = (ks_session.Session.
load_from_cli_options(args))
keystone_auth = self._get_keystone_auth(
keystone_session,
args.os_auth_url,
username=args.os_username,
user_id=args.os_user_id,
user_domain_id=args.os_user_domain_id,
user_domain_name=args.os_user_domain_name,
password=args.os_password,
auth_token=args.os_auth_token,
project_id=project_id,
project_name=project_name,
project_domain_id=args.os_project_domain_id,
project_domain_name=args.os_project_domain_name)
ks_session = loading.load_session_from_argparse_arguments(args)
keystone_auth = self._get_keystone_auth(
ks_session,
args.os_auth_url,
username=args.os_username,
user_id=args.os_user_id,
user_domain_id=args.os_user_domain_id,
user_domain_name=args.os_user_domain_name,
password=args.os_password,
auth_token=args.os_auth_token,
project_id=project_id,
project_name=project_name,
project_domain_id=args.os_project_domain_id,
project_domain_name=args.os_project_domain_name)
profile = osprofiler_profiler and options.profile
if profile:
osprofiler_profiler.init(options.profile)
self.cs = client.Client(options.os_database_api_version, os_username,
os_password, os_tenant_name, os_auth_url,
os_password, os_project_name, os_auth_url,
insecure, region_name=os_region_name,
tenant_id=os_tenant_id,
tenant_id=os_project_id,
endpoint_type=endpoint_type,
extensions=self.extensions,
service_type=service_type,
@ -522,7 +527,7 @@ class OpenStackTroveShell(object):
bypass_url=bypass_url,
auth_system=os_auth_system,
auth_plugin=auth_plugin,
session=keystone_session,
session=ks_session,
auth=keystone_auth)
try:

@ -16,7 +16,7 @@
# under the License.
import fixtures
from keystoneclient import adapter
from keystoneauth1 import adapter
import logging
import mock
import requests

@ -15,7 +15,7 @@ import re
import sys
import fixtures
from keystoneclient import fixture
from keystoneauth1 import fixture
import mock
import requests_mock
import six
@ -161,7 +161,7 @@ class ShellTest(testtools.TestCase):
else:
self.fail('CommandError not raised')
@mock.patch('keystoneclient._discover.get_version_data',
@mock.patch('keystoneauth1.discover.get_version_data',
return_value=[{u'status': u'stable', u'id': version_id,
u'links': links}])
@mock.patch('troveclient.v1.datastores.DatastoreVersions.list')
@ -182,7 +182,7 @@ class ShellTest(testtools.TestCase):
stdout, stderr = self.shell('datastore-version-list XXX')
self.assertEqual(expected, (stdout + stderr))
@mock.patch('keystoneclient._discover.get_version_data',
@mock.patch('keystoneauth1.discover.get_version_data',
return_value=[{u'status': u'stable', u'id': version_id,
u'links': links}])
@mock.patch('troveclient.v1.datastores.Datastores.list')
@ -282,11 +282,9 @@ class ShellTestKeystoneV3(ShellTest):
def test_no_project_id(self):
required = (
u'You must provide a tenant_name, tenant_id, '
u'You must provide a '
u'project_id or project_name (with '
u'project_domain_name or project_domain_id) via '
u' --os-tenant-name (env[OS_TENANT_NAME]),'
u' --os-tenant-id (env[OS_TENANT_ID]),'
u' --os-project-id (env[OS_PROJECT_ID])'
u' --os-project-name (env[OS_PROJECT_NAME]),'
u' --os-project-domain-id '
@ -302,7 +300,7 @@ class ShellTestKeystoneV3(ShellTest):
else:
self.fail('CommandError not raised')
@mock.patch('keystoneclient._discover.get_version_data',
@mock.patch('keystoneauth1.discover.get_version_data',
return_value=[{u'status': u'stable', u'id': version_id,
u'links': links}])
@mock.patch('troveclient.v1.datastores.DatastoreVersions.list')
@ -324,7 +322,7 @@ class ShellTestKeystoneV3(ShellTest):
stdout, stderr = self.shell('datastore-version-list XXX')
self.assertEqual(expected, (stdout + stderr))
@mock.patch('keystoneclient._discover.get_version_data',
@mock.patch('keystoneauth1.discover.get_version_data',
return_value=[{u'status': u'stable', u'id': version_id,
u'links': links}])
@mock.patch('troveclient.v1.datastores.Datastores.list')
@ -346,7 +344,7 @@ class ShellTestKeystoneV3(ShellTest):
stdout, stderr = self.shell('datastore-list')
self.assertEqual(expected, (stdout + stderr))
@mock.patch('keystoneclient._discover.get_version_data',
@mock.patch('keystoneauth1.discover.get_version_data',
return_value=[{u'status': u'stable', u'id': version_id,
u'links': links}])
@requests_mock.Mocker()