From a030d82e509f14e3bd2177b01f36115773712917 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Fri, 21 Sep 2018 09:17:41 -0500 Subject: [PATCH] Remove profile profile has been deprecated for a couple of releases now and its use has been removed from python-openstackclient and python-senlinclient. Remove it in anticipation of a 1.0 release. Change-Id: I2005b05eeed4f84ee8fc8745c13f8d68a0da0ace --- openstack/connection.py | 19 +- openstack/profile.py | 205 ------------------ openstack/tests/unit/test_connection.py | 16 -- .../removed-profile-b033d870937868a1.yaml | 5 + 4 files changed, 6 insertions(+), 239 deletions(-) delete mode 100644 openstack/profile.py create mode 100644 releasenotes/notes/removed-profile-b033d870937868a1.yaml diff --git a/openstack/connection.py b/openstack/connection.py index 4a9f4e135..3459d3a86 100644 --- a/openstack/connection.py +++ b/openstack/connection.py @@ -216,9 +216,6 @@ class Connection(six.with_metaclass(_meta.ConnectionMeta, def __init__(self, cloud=None, config=None, session=None, app_name=None, app_version=None, - # TODO(shade) Remove these once we've shifted - # python-openstackclient to not use the profile interface. - authenticator=None, profile=None, extra_services=None, strict=False, use_direct_get=False, @@ -252,14 +249,6 @@ class Connection(six.with_metaclass(_meta.ConnectionMeta, :param str app_name: Name of the application to be added to User Agent. :param str app_version: Version of the application to be added to User Agent. - :param authenticator: DEPRECATED. Only exists for short-term backwards - compatibility for python-openstackclient while we - transition. See :doc:`transition_from_profile` - for details. - :param profile: DEPRECATED. Only exists for short-term backwards - compatibility for python-openstackclient while we - transition. See :doc:`transition_from_profile` - for details. :param extra_services: List of :class:`~openstack.service_description.ServiceDescription` objects describing services that openstacksdk otherwise does not @@ -284,13 +273,7 @@ class Connection(six.with_metaclass(_meta.ConnectionMeta, self._extra_services[service.service_type] = service if not self.config: - if profile: - import openstack.profile - # TODO(shade) Remove this once we've shifted - # python-openstackclient to not use the profile interface. - self.config = openstack.profile._get_config_from_profile( - profile, authenticator, **kwargs) - elif session: + if session: self.config = cloud_region.from_session( session=session, app_name=app_name, app_version=app_version, diff --git a/openstack/profile.py b/openstack/profile.py deleted file mode 100644 index 26d3b5661..000000000 --- a/openstack/profile.py +++ /dev/null @@ -1,205 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -""" -:class:`~openstack.profile.Profile` is deprecated. Code should use -:class:`~openstack.config.cloud_region.CloudRegion` instead. -""" - -import copy - -from openstack import _log -from openstack.config import cloud_region -from openstack.config import defaults as config_defaults -from openstack.baremetal import baremetal_service -from openstack.block_storage import block_storage_service -from openstack.clustering import clustering_service -from openstack.compute import compute_service -from openstack.database import database_service -from openstack import exceptions -from openstack.identity import identity_service -from openstack.image import image_service -from openstack.key_manager import key_manager_service -from openstack.load_balancer import load_balancer_service as lb_service -from openstack.message import message_service -from openstack.network import network_service -from openstack.object_store import object_store_service -from openstack.orchestration import orchestration_service -from openstack import utils -from openstack.workflow import workflow_service - -_logger = _log.setup_logging('openstack') - - -def _get_config_from_profile(profile, authenticator, **kwargs): - # TODO(shade) Remove this once we've shifted python-openstackclient - # to not use the profile interface. - - region_name = None - for service in profile.get_services(): - if service.region: - region_name = service.region - service_type = service.service_type - if service.interface: - key = cloud_region._make_key('interface', service_type) - kwargs[key] = service.interface - if service.version: - version = service.version - if version.startswith('v'): - version = version[1:] - key = cloud_region._make_key('api_version', service_type) - kwargs[key] = version - if service.api_version: - version = service.api_version - key = cloud_region._make_key('default_microversion', service_type) - kwargs[key] = version - - config_kwargs = config_defaults.get_defaults() - config_kwargs.update(kwargs) - config = cloud_region.CloudRegion( - region_name=region_name, config=config_kwargs) - config._auth = authenticator - return config - - -class Profile(object): - - ALL = "*" - """Wildcard service identifier representing all services.""" - - @utils.deprecated(deprecated_in="0.10.0", removed_in="1.0", - details="Use openstack.config instead") - def __init__(self, plugins=None): - """User preference for each service. - - :param plugins: List of entry point namespaces to load. - - Create a new :class:`~openstack.profile.Profile` - object with no preferences defined, but knowledge of the services. - Services are identified by their service type, e.g.: 'identity', - 'compute', etc. - """ - self._services = {} - - self._add_service(baremetal_service.BaremetalService(version="v1")) - self._add_service( - block_storage_service.BlockStorageService(version="v2")) - self._add_service(clustering_service.ClusteringService(version="v1")) - self._add_service(compute_service.ComputeService(version="v2")) - self._add_service(database_service.DatabaseService(version="v1")) - self._add_service(identity_service.IdentityService(version="v3")) - self._add_service(image_service.ImageService(version="v2")) - self._add_service(key_manager_service.KeyManagerService(version="v1")) - self._add_service(lb_service.LoadBalancerService(version="v2")) - self._add_service(message_service.MessageService(version="v1")) - self._add_service(network_service.NetworkService(version="v2")) - self._add_service( - object_store_service.ObjectStoreService(version="v1")) - self._add_service( - orchestration_service.OrchestrationService(version="v1")) - self._add_service(workflow_service.WorkflowService(version="v2")) - - self.service_keys = sorted(self._services.keys()) - - def __repr__(self): - return repr(self._services) - - def _add_service(self, serv): - serv.interface = None - self._services[serv.service_type] = serv - - @utils.deprecated(deprecated_in="0.10.0", removed_in="1.0", - details="Use openstack.config instead") - def get_filter(self, service): - """Get a service preference. - - :param str service: Desired service type. - """ - return copy.copy(self._get_filter(service)) - - def _get_filter(self, service): - """Get a service preference. - - :param str service: Desired service type. - """ - serv = self._services.get(service, None) - if serv is not None: - return serv - msg = ("Service %s not in list of valid services: %s" % - (service, self.service_keys)) - raise exceptions.SDKException(msg) - - def _get_services(self, service): - return self.service_keys if service == self.ALL else [service] - - def _setter(self, service, attr, value): - for service in self._get_services(service): - setattr(self._get_filter(service), attr, value) - - @utils.deprecated(deprecated_in="0.10.0", removed_in="1.0", - details="Use openstack.config instead") - def get_services(self): - """Get a list of all the known services.""" - services = [] - for name, service in self._services.items(): - services.append(service) - return services - - @utils.deprecated(deprecated_in="0.10.0", removed_in="1.0", - details="Use openstack.config instead") - def set_name(self, service, name): - """Set the desired name for the specified service. - - :param str service: Service type. - :param str name: Desired service name. - """ - self._setter(service, "service_name", name) - - @utils.deprecated(deprecated_in="0.10.0", removed_in="1.0", - details="Use openstack.config instead") - def set_region(self, service, region): - """Set the desired region for the specified service. - - :param str service: Service type. - :param str region: Desired service region. - """ - self._setter(service, "region", region) - - @utils.deprecated(deprecated_in="0.10.0", removed_in="1.0", - details="Use openstack.config instead") - def set_version(self, service, version): - """Set the desired version for the specified service. - - :param str service: Service type. - :param str version: Desired service version. - """ - self._get_filter(service).version = version - - @utils.deprecated(deprecated_in="0.10.0", removed_in="1.0", - details="Use openstack.config instead") - def set_api_version(self, service, api_version): - """Set the desired API micro-version for the specified service. - - :param str service: Service type. - :param str api_version: Desired service API micro-version. - """ - self._setter(service, "api_version", api_version) - - @utils.deprecated(deprecated_in="0.10.0", removed_in="1.0", - details="Use openstack.config instead") - def set_interface(self, service, interface): - """Set the desired interface for the specified service. - - :param str service: Service type. - :param str interface: Desired service interface. - """ - self._setter(service, "interface", interface) diff --git a/openstack/tests/unit/test_connection.py b/openstack/tests/unit/test_connection.py index b8bdda0f4..ff8fc9d87 100644 --- a/openstack/tests/unit/test_connection.py +++ b/openstack/tests/unit/test_connection.py @@ -18,7 +18,6 @@ import mock from openstack import connection import openstack.config -from openstack import profile from openstack.tests.unit import base @@ -204,21 +203,6 @@ class TestConnection(base.TestCase): sot = connection.from_config(cloud="cacert") self.assertEqual(CONFIG_CACERT, sot.session.verify) - def test_from_profile(self): - """Copied from openstackclient/network/client.py make_client.""" - API_NAME = "network" - instance = self.cloud_config - - prof = profile.Profile() - prof.set_region(API_NAME, instance.region_name) - prof.set_version(API_NAME, instance.get_api_version(API_NAME)) - prof.set_interface(API_NAME, instance.get_interface(API_NAME)) - connection.Connection( - authenticator=instance.get_session().auth, - verify=instance.get_session().verify, - cert=instance.get_session().cert, - profile=prof) - class TestNetworkConnection(base.TestCase): # We need to do the neutron adapter test differently because it needs diff --git a/releasenotes/notes/removed-profile-b033d870937868a1.yaml b/releasenotes/notes/removed-profile-b033d870937868a1.yaml new file mode 100644 index 000000000..c5cac152b --- /dev/null +++ b/releasenotes/notes/removed-profile-b033d870937868a1.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + ``openstack.profile.Profile`` has been removed. ``openstack.config`` + should be used directly instead.