Use block-storage as default cinder service type

A recent change in tempest switch cinder service type from volumev3 to
block-storage, preventing us to discover correctly the endpoints.

block-storage is the default service type for cinder since years but the
volumev3 alias was widely used instead.
We will now use block-storage as default now and keep volumev3 as alias.

Also add block-store as another valid (but less used) alias.

See: https://review.opendev.org/c/openstack/tempest/+/930296

Closes-bug: #2085878

Change-Id: If2ff4c3ac7049e4df57521af7707ba5203d286ac
Signed-off-by: Arnaud M <arnaud.morin@gmail.com>
This commit is contained in:
Arnaud M 2024-10-30 00:31:40 +01:00
parent cf45187435
commit a90e30c320
5 changed files with 75 additions and 27 deletions

View File

@ -79,7 +79,7 @@ zun_api_versions = _try_import('zunclient.api_versions')
class NovaAction(base.OpenStackAction): class NovaAction(base.OpenStackAction):
_service_type = 'compute' _service_types = ['compute']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -115,7 +115,7 @@ class NovaAction(base.OpenStackAction):
class GlanceAction(base.OpenStackAction): class GlanceAction(base.OpenStackAction):
_service_type = 'image' _service_types = ['image']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -142,7 +142,7 @@ class GlanceAction(base.OpenStackAction):
class KeystoneAction(base.OpenStackAction): class KeystoneAction(base.OpenStackAction):
_service_type = 'identity' _service_types = ['identity']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -176,7 +176,7 @@ class KeystoneAction(base.OpenStackAction):
class HeatAction(base.OpenStackAction): class HeatAction(base.OpenStackAction):
_service_type = 'orchestration' _service_types = ['orchestration']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -204,7 +204,7 @@ class HeatAction(base.OpenStackAction):
class NeutronAction(base.OpenStackAction): class NeutronAction(base.OpenStackAction):
_service_type = 'network' _service_types = ['network']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -229,7 +229,14 @@ class NeutronAction(base.OpenStackAction):
class CinderAction(base.OpenStackAction): class CinderAction(base.OpenStackAction):
_service_type = 'volumev3' # NOTE(amorin) block-storage is the official one, but since years,
# cinder has been using volumev3 as default. The effort to switch
# the default to block-storage has been done during epoxy cycle.
# Also adding block-store as another alias.
# See all service types here:
# https://service-types.openstack.org/
# lp-2085878
_service_types = ['block-storage', 'volumev3', 'block-store']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -266,7 +273,7 @@ class CinderAction(base.OpenStackAction):
class MistralAction(base.OpenStackAction): class MistralAction(base.OpenStackAction):
_service_type = 'workflowv2' _service_types = ['workflowv2']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -293,7 +300,7 @@ class MistralAction(base.OpenStackAction):
class TroveAction(base.OpenStackAction): class TroveAction(base.OpenStackAction):
_service_type = 'database' _service_types = ['database']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -455,7 +462,7 @@ class SwiftServiceAction(base.OpenStackAction):
class ZaqarAction(base.OpenStackAction): class ZaqarAction(base.OpenStackAction):
_service_type = 'messaging' _service_types = ['messaging']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -590,7 +597,7 @@ class ZaqarAction(base.OpenStackAction):
class BarbicanAction(base.OpenStackAction): class BarbicanAction(base.OpenStackAction):
_service_type = 'key-manager' _service_types = ['key-manager']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -700,7 +707,7 @@ class BarbicanAction(base.OpenStackAction):
class DesignateAction(base.OpenStackAction): class DesignateAction(base.OpenStackAction):
_service_type = 'dns' _service_types = ['dns']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -781,7 +788,7 @@ class TackerAction(base.OpenStackAction):
class AodhAction(base.OpenStackAction): class AodhAction(base.OpenStackAction):
_service_type = 'alarming' _service_types = ['alarming']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -812,7 +819,7 @@ class AodhAction(base.OpenStackAction):
class GnocchiAction(base.OpenStackAction): class GnocchiAction(base.OpenStackAction):
_service_type = 'metric' _service_types = ['metric']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -846,7 +853,7 @@ class GnocchiAction(base.OpenStackAction):
class VitrageAction(base.OpenStackAction): class VitrageAction(base.OpenStackAction):
_service_type = 'rca' _service_types = ['rca']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):
@ -918,7 +925,7 @@ class ZunAction(base.OpenStackAction):
class ManilaAction(base.OpenStackAction): class ManilaAction(base.OpenStackAction):
_service_type = 'sharev2' _service_types = ['sharev2']
@classmethod @classmethod
def _get_client_class(cls): def _get_client_class(cls):

View File

@ -38,7 +38,7 @@ class OpenStackAction(actions.Action):
_kwargs_for_run = {} _kwargs_for_run = {}
client_method_name = None client_method_name = None
_service_name = None _service_name = None
_service_type = None _service_types = []
_client_class = None _client_class = None
def __init__(self, **kwargs): def __init__(self, **kwargs):
@ -95,12 +95,28 @@ class OpenStackAction(actions.Action):
:param context: the action context :param context: the action context
:return: dict that can be used to initialize service clients :return: dict that can be used to initialize service clients
""" """
sess = None
for service_type in self._service_types:
try:
sess = keystone_utils.get_session_and_auth(
service_name=self._service_name,
service_type=service_type,
region_name=self.action_region,
ctx=context)
except exc.MistralKeystoneException:
# Maybe this service_type was not found
pass
return keystone_utils.get_session_and_auth( if not sess:
service_name=self._service_name, raise exc.MistralException(
service_type=self._service_type, "Unable to get keystone session. Maybe endpoints are "
region_name=self.action_region, "missing? (service_name=%s, service_types=%s,"
ctx=context) " region_name=%s)"
% (self._service_name, self._service_types,
self.action_region)
)
return sess
def get_service_endpoint(self): def get_service_endpoint(self):
"""Get OpenStack service endpoint. """Get OpenStack service endpoint.
@ -108,11 +124,26 @@ class OpenStackAction(actions.Action):
'service_name' and 'service_type' are defined in specific OpenStack 'service_name' and 'service_type' are defined in specific OpenStack
service action. service action.
""" """
endpoint = keystone_utils.get_endpoint_for_project( endpoint = None
service_name=self._service_name, for service_type in self._service_types:
service_type=self._service_type, try:
region_name=self.action_region endpoint = keystone_utils.get_endpoint_for_project(
) service_name=self._service_name,
service_type=service_type,
region_name=self.action_region
)
except exc.MistralKeystoneException:
# Maybe this service_type was not found
pass
if not endpoint:
raise exc.MistralException(
"Unable to get service endpoint. Maybe endpoints are "
"missing? (service_name=%s, service_types=%s,"
" region_name=%s)"
% (self._service_name, self._service_types,
self.action_region)
)
return endpoint return endpoint

View File

@ -27,3 +27,7 @@ class ApplicationContextNotFoundException(MistralException):
class ActionException(MistralException): class ActionException(MistralException):
http_code = 400 http_code = 400
class MistralKeystoneException(MistralException):
message = "A unknown Keystone exception occurred"

View File

@ -203,7 +203,7 @@ def get_endpoint_for_project(service_name=None, service_type=None,
break break
if not endpoint: if not endpoint:
raise exceptions.MistralException( raise exceptions.MistralKeystoneException(
"No endpoints found [service_name=%s, service_type=%s," "No endpoints found [service_name=%s, service_type=%s,"
" region_name=%s]" " region_name=%s]"
% (service_name, service_type, region) % (service_name, service_type, region)

View File

@ -0,0 +1,6 @@
---
deprecations:
- |
Use ``block-storage`` as default cinder service type in mistral actions.
Also adding ``volumev3`` and ``block-store`` as valid aliases.
See lp-2085878.