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):
_service_type = 'compute'
_service_types = ['compute']
@classmethod
def _get_client_class(cls):
@ -115,7 +115,7 @@ class NovaAction(base.OpenStackAction):
class GlanceAction(base.OpenStackAction):
_service_type = 'image'
_service_types = ['image']
@classmethod
def _get_client_class(cls):
@ -142,7 +142,7 @@ class GlanceAction(base.OpenStackAction):
class KeystoneAction(base.OpenStackAction):
_service_type = 'identity'
_service_types = ['identity']
@classmethod
def _get_client_class(cls):
@ -176,7 +176,7 @@ class KeystoneAction(base.OpenStackAction):
class HeatAction(base.OpenStackAction):
_service_type = 'orchestration'
_service_types = ['orchestration']
@classmethod
def _get_client_class(cls):
@ -204,7 +204,7 @@ class HeatAction(base.OpenStackAction):
class NeutronAction(base.OpenStackAction):
_service_type = 'network'
_service_types = ['network']
@classmethod
def _get_client_class(cls):
@ -229,7 +229,14 @@ class NeutronAction(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
def _get_client_class(cls):
@ -266,7 +273,7 @@ class CinderAction(base.OpenStackAction):
class MistralAction(base.OpenStackAction):
_service_type = 'workflowv2'
_service_types = ['workflowv2']
@classmethod
def _get_client_class(cls):
@ -293,7 +300,7 @@ class MistralAction(base.OpenStackAction):
class TroveAction(base.OpenStackAction):
_service_type = 'database'
_service_types = ['database']
@classmethod
def _get_client_class(cls):
@ -455,7 +462,7 @@ class SwiftServiceAction(base.OpenStackAction):
class ZaqarAction(base.OpenStackAction):
_service_type = 'messaging'
_service_types = ['messaging']
@classmethod
def _get_client_class(cls):
@ -590,7 +597,7 @@ class ZaqarAction(base.OpenStackAction):
class BarbicanAction(base.OpenStackAction):
_service_type = 'key-manager'
_service_types = ['key-manager']
@classmethod
def _get_client_class(cls):
@ -700,7 +707,7 @@ class BarbicanAction(base.OpenStackAction):
class DesignateAction(base.OpenStackAction):
_service_type = 'dns'
_service_types = ['dns']
@classmethod
def _get_client_class(cls):
@ -781,7 +788,7 @@ class TackerAction(base.OpenStackAction):
class AodhAction(base.OpenStackAction):
_service_type = 'alarming'
_service_types = ['alarming']
@classmethod
def _get_client_class(cls):
@ -812,7 +819,7 @@ class AodhAction(base.OpenStackAction):
class GnocchiAction(base.OpenStackAction):
_service_type = 'metric'
_service_types = ['metric']
@classmethod
def _get_client_class(cls):
@ -846,7 +853,7 @@ class GnocchiAction(base.OpenStackAction):
class VitrageAction(base.OpenStackAction):
_service_type = 'rca'
_service_types = ['rca']
@classmethod
def _get_client_class(cls):
@ -918,7 +925,7 @@ class ZunAction(base.OpenStackAction):
class ManilaAction(base.OpenStackAction):
_service_type = 'sharev2'
_service_types = ['sharev2']
@classmethod
def _get_client_class(cls):

View File

@ -38,7 +38,7 @@ class OpenStackAction(actions.Action):
_kwargs_for_run = {}
client_method_name = None
_service_name = None
_service_type = None
_service_types = []
_client_class = None
def __init__(self, **kwargs):
@ -95,12 +95,28 @@ class OpenStackAction(actions.Action):
:param context: the action context
: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(
service_name=self._service_name,
service_type=self._service_type,
region_name=self.action_region,
ctx=context)
if not sess:
raise exc.MistralException(
"Unable to get keystone session. Maybe endpoints are "
"missing? (service_name=%s, service_types=%s,"
" region_name=%s)"
% (self._service_name, self._service_types,
self.action_region)
)
return sess
def get_service_endpoint(self):
"""Get OpenStack service endpoint.
@ -108,11 +124,26 @@ class OpenStackAction(actions.Action):
'service_name' and 'service_type' are defined in specific OpenStack
service action.
"""
endpoint = keystone_utils.get_endpoint_for_project(
service_name=self._service_name,
service_type=self._service_type,
region_name=self.action_region
)
endpoint = None
for service_type in self._service_types:
try:
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

View File

@ -27,3 +27,7 @@ class ApplicationContextNotFoundException(MistralException):
class ActionException(MistralException):
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
if not endpoint:
raise exceptions.MistralException(
raise exceptions.MistralKeystoneException(
"No endpoints found [service_name=%s, service_type=%s,"
" region_name=%s]"
% (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.