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.
|
for specific details.
|
||||||
|
|
||||||
:param string version: The version of API to use.
|
:param string version: The version of API to use.
|
||||||
:param session: A keystoneclient session that should be used for transport.
|
:param session: A keystoneauth1 session that should be used for transport.
|
||||||
:type session: keystoneclient.session.Session
|
:type session: keystoneauth1.session.Session
|
||||||
"""
|
"""
|
||||||
# FIXME(jamielennox): Add a deprecation warning if no session is passed.
|
# 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.
|
# Leaving it as an option until we can ensure nothing break when we switch.
|
||||||
|
@ -17,8 +17,8 @@ import copy
|
|||||||
import logging
|
import logging
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
from keystoneclient import adapter
|
from keystoneauth1 import adapter
|
||||||
from keystoneclient import exceptions as ksc_exc
|
from keystoneauth1 import exceptions as ksa_exc
|
||||||
from oslo_utils import importutils
|
from oslo_utils import importutils
|
||||||
from oslo_utils import netutils
|
from oslo_utils import netutils
|
||||||
import requests
|
import requests
|
||||||
@ -329,13 +329,13 @@ class SessionClient(adapter.Adapter, _BaseHTTPClient):
|
|||||||
headers=headers,
|
headers=headers,
|
||||||
data=data,
|
data=data,
|
||||||
**kwargs)
|
**kwargs)
|
||||||
except ksc_exc.RequestTimeout as e:
|
except ksa_exc.ConnectTimeout as e:
|
||||||
conn_url = self.get_endpoint(auth=kwargs.get('auth'))
|
conn_url = self.get_endpoint(auth=kwargs.get('auth'))
|
||||||
conn_url = "%s/%s" % (conn_url.rstrip('/'), url.lstrip('/'))
|
conn_url = "%s/%s" % (conn_url.rstrip('/'), url.lstrip('/'))
|
||||||
message = ("Error communicating with %(url)s %(e)s" %
|
message = ("Error communicating with %(url)s %(e)s" %
|
||||||
dict(url=conn_url, e=e))
|
dict(url=conn_url, e=e))
|
||||||
raise exc.InvalidEndpoint(message=message)
|
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 = self.get_endpoint(auth=kwargs.get('auth'))
|
||||||
conn_url = "%s/%s" % (conn_url.rstrip('/'), url.lstrip('/'))
|
conn_url = "%s/%s" % (conn_url.rstrip('/'), url.lstrip('/'))
|
||||||
message = ("Error finding address for %(url)s: %(e)s" %
|
message = ("Error finding address for %(url)s: %(e)s" %
|
||||||
|
@ -38,11 +38,11 @@ from glanceclient._i18n import _
|
|||||||
from glanceclient.common import utils
|
from glanceclient.common import utils
|
||||||
from glanceclient import exc
|
from glanceclient import exc
|
||||||
|
|
||||||
from keystoneclient.auth.identity import v2 as v2_auth
|
from keystoneauth1 import discover
|
||||||
from keystoneclient.auth.identity import v3 as v3_auth
|
from keystoneauth1 import exceptions as ks_exc
|
||||||
from keystoneclient import discover
|
from keystoneauth1.identity import v2 as v2_auth
|
||||||
from keystoneclient import exceptions as ks_exc
|
from keystoneauth1.identity import v3 as v3_auth
|
||||||
from keystoneclient import session
|
from keystoneauth1 import loading
|
||||||
|
|
||||||
osprofiler_profiler = importutils.try_import("osprofiler.profiler")
|
osprofiler_profiler = importutils.try_import("osprofiler.profiler")
|
||||||
|
|
||||||
@ -51,10 +51,14 @@ SUPPORTED_VERSIONS = [1, 2]
|
|||||||
|
|
||||||
class OpenStackImagesShell(object):
|
class OpenStackImagesShell(object):
|
||||||
|
|
||||||
def _append_global_identity_args(self, parser):
|
def _append_global_identity_args(self, parser, argv):
|
||||||
# register common identity args
|
# register common identity args
|
||||||
session.Session.register_cli_options(parser)
|
parser.set_defaults(os_auth_url=utils.env('OS_AUTH_URL'))
|
||||||
v3_auth.Password.register_argparse_arguments(parser)
|
|
||||||
|
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',
|
parser.add_argument('--key-file',
|
||||||
dest='os_key',
|
dest='os_key',
|
||||||
@ -68,17 +72,9 @@ class OpenStackImagesShell(object):
|
|||||||
dest='os_cert',
|
dest='os_cert',
|
||||||
help='DEPRECATED! Use --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',
|
parser.add_argument('--os_tenant_id',
|
||||||
help=argparse.SUPPRESS)
|
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',
|
parser.add_argument('--os_tenant_name',
|
||||||
help=argparse.SUPPRESS)
|
help=argparse.SUPPRESS)
|
||||||
|
|
||||||
@ -110,7 +106,19 @@ class OpenStackImagesShell(object):
|
|||||||
parser.add_argument('--os_endpoint_type',
|
parser.add_argument('--os_endpoint_type',
|
||||||
help=argparse.SUPPRESS)
|
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(
|
parser = argparse.ArgumentParser(
|
||||||
prog='glance',
|
prog='glance',
|
||||||
description=__doc__.strip(),
|
description=__doc__.strip(),
|
||||||
@ -194,12 +202,12 @@ class OpenStackImagesShell(object):
|
|||||||
'the profiling will not be triggered even '
|
'the profiling will not be triggered even '
|
||||||
'if osprofiler is enabled on server side.')
|
'if osprofiler is enabled on server side.')
|
||||||
|
|
||||||
self._append_global_identity_args(parser)
|
self._append_global_identity_args(parser, argv)
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def get_subcommand_parser(self, version):
|
def get_subcommand_parser(self, version, argv=None):
|
||||||
parser = self.get_base_parser()
|
parser = self.get_base_parser(argv)
|
||||||
|
|
||||||
self.subcommands = {}
|
self.subcommands = {}
|
||||||
subparsers = parser.add_subparsers(metavar='<subcommand>')
|
subparsers = parser.add_subparsers(metavar='<subcommand>')
|
||||||
@ -261,7 +269,7 @@ class OpenStackImagesShell(object):
|
|||||||
v2_auth_url = None
|
v2_auth_url = None
|
||||||
v3_auth_url = None
|
v3_auth_url = None
|
||||||
try:
|
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')
|
v2_auth_url = ks_discover.url_for('2.0')
|
||||||
v3_auth_url = ks_discover.url_for('3.0')
|
v3_auth_url = ks_discover.url_for('3.0')
|
||||||
except ks_exc.ClientException as e:
|
except ks_exc.ClientException as e:
|
||||||
@ -372,16 +380,11 @@ class OpenStackImagesShell(object):
|
|||||||
"or prompted response"))
|
"or prompted response"))
|
||||||
|
|
||||||
# Validate password flow auth
|
# Validate password flow auth
|
||||||
project_info = (
|
os_project_name = getattr(
|
||||||
args.os_tenant_name or args.os_tenant_id or (
|
args, 'os_project_name', getattr(args, 'os_tenant_name', None))
|
||||||
args.os_project_name and (
|
os_project_id = getattr(
|
||||||
args.os_project_domain_name or
|
args, 'os_project_id', getattr(args, 'os_tenant_id', None))
|
||||||
args.os_project_domain_id
|
if not any([os_project_name, os_project_id]):
|
||||||
)
|
|
||||||
) or args.os_project_id
|
|
||||||
)
|
|
||||||
|
|
||||||
if not project_info:
|
|
||||||
# tenant is deprecated in Keystone v3. Use the latest
|
# tenant is deprecated in Keystone v3. Use the latest
|
||||||
# terminology instead.
|
# terminology instead.
|
||||||
raise exc.CommandError(
|
raise exc.CommandError(
|
||||||
@ -432,7 +435,7 @@ class OpenStackImagesShell(object):
|
|||||||
'ssl_compression': args.ssl_compression
|
'ssl_compression': args.ssl_compression
|
||||||
}
|
}
|
||||||
else:
|
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)
|
auth_plugin_kwargs = self._get_kwargs_to_create_auth_plugin(args)
|
||||||
ks_session.auth = self._get_keystone_auth_plugin(
|
ks_session.auth = self._get_keystone_auth_plugin(
|
||||||
ks_session=ks_session, **auth_plugin_kwargs)
|
ks_session=ks_session, **auth_plugin_kwargs)
|
||||||
@ -490,7 +493,7 @@ class OpenStackImagesShell(object):
|
|||||||
|
|
||||||
def _get_subparser(api_version):
|
def _get_subparser(api_version):
|
||||||
try:
|
try:
|
||||||
return self.get_subcommand_parser(api_version)
|
return self.get_subcommand_parser(api_version, argv)
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
if not str(e):
|
if not str(e):
|
||||||
# Add a generic import error message if the raised
|
# Add a generic import error message if the raised
|
||||||
@ -504,7 +507,7 @@ class OpenStackImagesShell(object):
|
|||||||
# NOTE(flepied) Under Python3, parsed arguments are removed
|
# NOTE(flepied) Under Python3, parsed arguments are removed
|
||||||
# from the list so make a copy for the first parsing
|
# from the list so make a copy for the first parsing
|
||||||
base_argv = copy.deepcopy(argv)
|
base_argv = copy.deepcopy(argv)
|
||||||
parser = self.get_base_parser()
|
parser = self.get_base_parser(argv)
|
||||||
(options, args) = parser.parse_known_args(base_argv)
|
(options, args) = parser.parse_known_args(base_argv)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
import functools
|
import functools
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from keystoneclient.auth import token_endpoint
|
from keystoneauth1 import session
|
||||||
from keystoneclient import session
|
from keystoneauth1 import token_endpoint
|
||||||
import mock
|
import mock
|
||||||
import requests
|
import requests
|
||||||
from requests_mock.contrib import fixture
|
from requests_mock.contrib import fixture
|
||||||
|
@ -27,8 +27,8 @@ import traceback
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
from keystoneclient import exceptions as ks_exc
|
from keystoneauth1 import exceptions as ks_exc
|
||||||
from keystoneclient import fixture as ks_fixture
|
from keystoneauth1 import fixture as ks_fixture
|
||||||
import mock
|
import mock
|
||||||
from requests_mock.contrib import fixture as rm_fixture
|
from requests_mock.contrib import fixture as rm_fixture
|
||||||
import six
|
import six
|
||||||
@ -250,7 +250,9 @@ class ShellTest(testutils.TestCase):
|
|||||||
|
|
||||||
def test_get_base_parser(self):
|
def test_get_base_parser(self):
|
||||||
test_shell = openstack_shell.OpenStackImagesShell()
|
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.'
|
description = 'Command-line interface to the OpenStack Images API.'
|
||||||
expected = argparse.ArgumentParser(
|
expected = argparse.ArgumentParser(
|
||||||
prog='glance', usage=None,
|
prog='glance', usage=None,
|
||||||
@ -637,7 +639,7 @@ class ShellTestWithKeystoneV3Auth(ShellTest):
|
|||||||
glance_shell.main(args.split())
|
glance_shell.main(args.split())
|
||||||
self.assertEqual(0, self.v3_auth.call_count)
|
self.assertEqual(0, self.v3_auth.call_count)
|
||||||
|
|
||||||
@mock.patch('keystoneclient.discover.Discover',
|
@mock.patch('keystoneauth1.discover.Discover',
|
||||||
side_effect=ks_exc.ClientException())
|
side_effect=ks_exc.ClientException())
|
||||||
def test_api_discovery_failed_with_unversioned_auth_url(self,
|
def test_api_discovery_failed_with_unversioned_auth_url(self,
|
||||||
discover):
|
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
|
pbr>=1.6 # Apache-2.0
|
||||||
Babel>=2.3.4 # BSD
|
Babel>=2.3.4 # BSD
|
||||||
PrettyTable<0.8,>=0.7 # 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
|
requests>=2.10.0 # Apache-2.0
|
||||||
warlock!=1.3.0,<2,>=1.0.1 # Apache-2.0
|
warlock!=1.3.0,<2,>=1.0.1 # Apache-2.0
|
||||||
six>=1.9.0 # MIT
|
six>=1.9.0 # MIT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user