switch from keystoneclient to keystoneauth
move glanceclient to keystoneauth as keystoneclient's auth session,
plugins and adapter code has been deprecated.
refer to [1] for more information.
1: 1a84e24fa4
implements bp: use-keystoneauth
Co-Authored-By: Itisha <ishadewan07@gmail.com>
Change-Id: I88fb327628e1bec48dc391f50d66b3deab4a8ab9
This commit is contained in:
parent
fec9b5f5e3
commit
a9115b4cd8
@ -25,8 +25,8 @@ def Client(version=None, endpoint=None, session=None, *args, **kwargs):
|
||||
for specific details.
|
||||
|
||||
:param string version: The version of API to use.
|
||||
:param session: A keystoneclient session that should be used for transport.
|
||||
:type session: keystoneclient.session.Session
|
||||
:param session: A keystoneauth1 session that should be used for transport.
|
||||
:type session: keystoneauth1.session.Session
|
||||
"""
|
||||
# FIXME(jamielennox): Add a deprecation warning if no session is passed.
|
||||
# Leaving it as an option until we can ensure nothing break when we switch.
|
||||
|
@ -17,8 +17,8 @@ import copy
|
||||
import logging
|
||||
import socket
|
||||
|
||||
from keystoneclient import adapter
|
||||
from keystoneclient import exceptions as ksc_exc
|
||||
from keystoneauth1 import adapter
|
||||
from keystoneauth1 import exceptions as ksa_exc
|
||||
from oslo_utils import importutils
|
||||
from oslo_utils import netutils
|
||||
import requests
|
||||
@ -329,13 +329,13 @@ class SessionClient(adapter.Adapter, _BaseHTTPClient):
|
||||
headers=headers,
|
||||
data=data,
|
||||
**kwargs)
|
||||
except ksc_exc.RequestTimeout as e:
|
||||
except ksa_exc.ConnectTimeout as e:
|
||||
conn_url = self.get_endpoint(auth=kwargs.get('auth'))
|
||||
conn_url = "%s/%s" % (conn_url.rstrip('/'), url.lstrip('/'))
|
||||
message = ("Error communicating with %(url)s %(e)s" %
|
||||
dict(url=conn_url, e=e))
|
||||
raise exc.InvalidEndpoint(message=message)
|
||||
except ksc_exc.ConnectionRefused as e:
|
||||
except ksa_exc.ConnectFailure as e:
|
||||
conn_url = self.get_endpoint(auth=kwargs.get('auth'))
|
||||
conn_url = "%s/%s" % (conn_url.rstrip('/'), url.lstrip('/'))
|
||||
message = ("Error finding address for %(url)s: %(e)s" %
|
||||
|
@ -38,11 +38,11 @@ from glanceclient._i18n import _
|
||||
from glanceclient.common import utils
|
||||
from glanceclient import exc
|
||||
|
||||
from keystoneclient.auth.identity import v2 as v2_auth
|
||||
from keystoneclient.auth.identity import v3 as v3_auth
|
||||
from keystoneclient import discover
|
||||
from keystoneclient import exceptions as ks_exc
|
||||
from keystoneclient import session
|
||||
from keystoneauth1 import discover
|
||||
from keystoneauth1 import exceptions as ks_exc
|
||||
from keystoneauth1.identity import v2 as v2_auth
|
||||
from keystoneauth1.identity import v3 as v3_auth
|
||||
from keystoneauth1 import loading
|
||||
|
||||
osprofiler_profiler = importutils.try_import("osprofiler.profiler")
|
||||
|
||||
@ -51,10 +51,14 @@ SUPPORTED_VERSIONS = [1, 2]
|
||||
|
||||
class OpenStackImagesShell(object):
|
||||
|
||||
def _append_global_identity_args(self, parser):
|
||||
def _append_global_identity_args(self, parser, argv):
|
||||
# register common identity args
|
||||
session.Session.register_cli_options(parser)
|
||||
v3_auth.Password.register_argparse_arguments(parser)
|
||||
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('--key-file',
|
||||
dest='os_key',
|
||||
@ -68,17 +72,9 @@ class OpenStackImagesShell(object):
|
||||
dest='os_cert',
|
||||
help='DEPRECATED! Use --os-cert.')
|
||||
|
||||
parser.add_argument('--os-tenant-id',
|
||||
default=utils.env('OS_TENANT_ID'),
|
||||
help='Defaults to env[OS_TENANT_ID].')
|
||||
|
||||
parser.add_argument('--os_tenant_id',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
parser.add_argument('--os-tenant-name',
|
||||
default=utils.env('OS_TENANT_NAME'),
|
||||
help='Defaults to env[OS_TENANT_NAME].')
|
||||
|
||||
parser.add_argument('--os_tenant_name',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
@ -110,7 +106,19 @@ class OpenStackImagesShell(object):
|
||||
parser.add_argument('--os_endpoint_type',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
def get_base_parser(self):
|
||||
loading.register_session_argparse_arguments(parser)
|
||||
# Peek into argv to see if os-auth-token (or the deprecated
|
||||
# os_auth_token) or the new os-token or the environment variable
|
||||
# OS_AUTH_TOKEN were given. In which case, the token auth plugin is
|
||||
# what the user wants. Else, we'll default to password.
|
||||
default_auth_plugin = 'password'
|
||||
token_opts = ['os-token', 'os-auth-token', 'os_auth-token']
|
||||
if argv and any(i in token_opts for i in argv):
|
||||
default_auth_plugin = 'token'
|
||||
loading.register_auth_argparse_arguments(
|
||||
parser, argv, default=default_auth_plugin)
|
||||
|
||||
def get_base_parser(self, argv):
|
||||
parser = argparse.ArgumentParser(
|
||||
prog='glance',
|
||||
description=__doc__.strip(),
|
||||
@ -194,12 +202,12 @@ class OpenStackImagesShell(object):
|
||||
'the profiling will not be triggered even '
|
||||
'if osprofiler is enabled on server side.')
|
||||
|
||||
self._append_global_identity_args(parser)
|
||||
self._append_global_identity_args(parser, argv)
|
||||
|
||||
return parser
|
||||
|
||||
def get_subcommand_parser(self, version):
|
||||
parser = self.get_base_parser()
|
||||
def get_subcommand_parser(self, version, argv=None):
|
||||
parser = self.get_base_parser(argv)
|
||||
|
||||
self.subcommands = {}
|
||||
subparsers = parser.add_subparsers(metavar='<subcommand>')
|
||||
@ -261,7 +269,7 @@ class OpenStackImagesShell(object):
|
||||
v2_auth_url = None
|
||||
v3_auth_url = None
|
||||
try:
|
||||
ks_discover = discover.Discover(session=session, auth_url=auth_url)
|
||||
ks_discover = discover.Discover(session=session, url=auth_url)
|
||||
v2_auth_url = ks_discover.url_for('2.0')
|
||||
v3_auth_url = ks_discover.url_for('3.0')
|
||||
except ks_exc.ClientException as e:
|
||||
@ -372,16 +380,11 @@ class OpenStackImagesShell(object):
|
||||
"or prompted response"))
|
||||
|
||||
# Validate password flow auth
|
||||
project_info = (
|
||||
args.os_tenant_name or args.os_tenant_id or (
|
||||
args.os_project_name and (
|
||||
args.os_project_domain_name or
|
||||
args.os_project_domain_id
|
||||
)
|
||||
) or args.os_project_id
|
||||
)
|
||||
|
||||
if not project_info:
|
||||
os_project_name = getattr(
|
||||
args, 'os_project_name', getattr(args, 'os_tenant_name', None))
|
||||
os_project_id = getattr(
|
||||
args, 'os_project_id', getattr(args, 'os_tenant_id', None))
|
||||
if not any([os_project_name, os_project_id]):
|
||||
# tenant is deprecated in Keystone v3. Use the latest
|
||||
# terminology instead.
|
||||
raise exc.CommandError(
|
||||
@ -432,7 +435,7 @@ class OpenStackImagesShell(object):
|
||||
'ssl_compression': args.ssl_compression
|
||||
}
|
||||
else:
|
||||
ks_session = session.Session.load_from_cli_options(args)
|
||||
ks_session = loading.load_session_from_argparse_arguments(args)
|
||||
auth_plugin_kwargs = self._get_kwargs_to_create_auth_plugin(args)
|
||||
ks_session.auth = self._get_keystone_auth_plugin(
|
||||
ks_session=ks_session, **auth_plugin_kwargs)
|
||||
@ -490,7 +493,7 @@ class OpenStackImagesShell(object):
|
||||
|
||||
def _get_subparser(api_version):
|
||||
try:
|
||||
return self.get_subcommand_parser(api_version)
|
||||
return self.get_subcommand_parser(api_version, argv)
|
||||
except ImportError as e:
|
||||
if not str(e):
|
||||
# Add a generic import error message if the raised
|
||||
@ -504,7 +507,7 @@ class OpenStackImagesShell(object):
|
||||
# NOTE(flepied) Under Python3, parsed arguments are removed
|
||||
# from the list so make a copy for the first parsing
|
||||
base_argv = copy.deepcopy(argv)
|
||||
parser = self.get_base_parser()
|
||||
parser = self.get_base_parser(argv)
|
||||
(options, args) = parser.parse_known_args(base_argv)
|
||||
|
||||
try:
|
||||
|
@ -15,8 +15,8 @@
|
||||
import functools
|
||||
import json
|
||||
|
||||
from keystoneclient.auth import token_endpoint
|
||||
from keystoneclient import session
|
||||
from keystoneauth1 import session
|
||||
from keystoneauth1 import token_endpoint
|
||||
import mock
|
||||
import requests
|
||||
from requests_mock.contrib import fixture
|
||||
|
@ -27,8 +27,8 @@ import traceback
|
||||
import uuid
|
||||
|
||||
import fixtures
|
||||
from keystoneclient import exceptions as ks_exc
|
||||
from keystoneclient import fixture as ks_fixture
|
||||
from keystoneauth1 import exceptions as ks_exc
|
||||
from keystoneauth1 import fixture as ks_fixture
|
||||
import mock
|
||||
from requests_mock.contrib import fixture as rm_fixture
|
||||
import six
|
||||
@ -250,7 +250,9 @@ class ShellTest(testutils.TestCase):
|
||||
|
||||
def test_get_base_parser(self):
|
||||
test_shell = openstack_shell.OpenStackImagesShell()
|
||||
actual_parser = test_shell.get_base_parser()
|
||||
# NOTE(stevemar): Use the current sys.argv for base_parser since it
|
||||
# doesn't matter for this test, it just needs to initialize the CLI
|
||||
actual_parser = test_shell.get_base_parser(sys.argv)
|
||||
description = 'Command-line interface to the OpenStack Images API.'
|
||||
expected = argparse.ArgumentParser(
|
||||
prog='glance', usage=None,
|
||||
@ -637,7 +639,7 @@ class ShellTestWithKeystoneV3Auth(ShellTest):
|
||||
glance_shell.main(args.split())
|
||||
self.assertEqual(0, self.v3_auth.call_count)
|
||||
|
||||
@mock.patch('keystoneclient.discover.Discover',
|
||||
@mock.patch('keystoneauth1.discover.Discover',
|
||||
side_effect=ks_exc.ClientException())
|
||||
def test_api_discovery_failed_with_unversioned_auth_url(self,
|
||||
discover):
|
||||
|
11
releasenotes/notes/bp-use-keystoneauth-e12f300e58577b13.yaml
Normal file
11
releasenotes/notes/bp-use-keystoneauth-e12f300e58577b13.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
prelude: >
|
||||
Switch to using keystoneauth for session and auth plugins.
|
||||
other:
|
||||
- >
|
||||
[`bp use-keystoneauth <https://blueprints.launchpad.net/python-glanceclient/+spec/use-keystoneauth>`_]
|
||||
As of keystoneclient 2.2.0, the session and auth plugins code has
|
||||
been deprecated. These modules have been moved to the keystoneauth
|
||||
library. Consumers of the session and plugin modules are encouraged
|
||||
to move to keystoneauth. Note that there should be no change to
|
||||
end users of glanceclient.
|
@ -4,7 +4,7 @@
|
||||
pbr>=1.6 # Apache-2.0
|
||||
Babel>=2.3.4 # BSD
|
||||
PrettyTable<0.8,>=0.7 # BSD
|
||||
python-keystoneclient!=2.1.0,>=2.0.0 # Apache-2.0
|
||||
keystoneauth1>=2.10.0 # Apache-2.0
|
||||
requests>=2.10.0 # Apache-2.0
|
||||
warlock!=1.3.0,<2,>=1.0.1 # Apache-2.0
|
||||
six>=1.9.0 # MIT
|
||||
|
Loading…
Reference in New Issue
Block a user