Get region_name that volume_driver rexray region_name needs
Config volume_driver rexray need region_name The patch gets region_name, validates the region_name and add Unit test. Co-Authored By: Kai Qiang Wu(Kennan)<wkqwu@cn.ibm.com> Co-Authored By: Ton Ngo<ton@us.ibm.com> Partially-Implements: blueprint magnum-integrate-with-cinder Change-Id: I3fcef0ffb7cda162fffcbedf4628cad81168d09d
This commit is contained in:
parent
af4ecf6555
commit
42d094b757
@ -104,12 +104,19 @@ neutron_client_opts = [
|
|||||||
'Type of endpoint in Identity service catalog to use '
|
'Type of endpoint in Identity service catalog to use '
|
||||||
'for communication with the OpenStack service.'))]
|
'for communication with the OpenStack service.'))]
|
||||||
|
|
||||||
|
cinder_client_opts = [
|
||||||
|
cfg.StrOpt('region_name',
|
||||||
|
help=_('Region in Identity service catalog to use for '
|
||||||
|
'communication with the OpenStack service.'))]
|
||||||
|
|
||||||
|
|
||||||
cfg.CONF.register_opts(magnum_client_opts, group='magnum_client')
|
cfg.CONF.register_opts(magnum_client_opts, group='magnum_client')
|
||||||
cfg.CONF.register_opts(heat_client_opts, group='heat_client')
|
cfg.CONF.register_opts(heat_client_opts, group='heat_client')
|
||||||
cfg.CONF.register_opts(glance_client_opts, group='glance_client')
|
cfg.CONF.register_opts(glance_client_opts, group='glance_client')
|
||||||
cfg.CONF.register_opts(barbican_client_opts, group='barbican_client')
|
cfg.CONF.register_opts(barbican_client_opts, group='barbican_client')
|
||||||
cfg.CONF.register_opts(nova_client_opts, group='nova_client')
|
cfg.CONF.register_opts(nova_client_opts, group='nova_client')
|
||||||
cfg.CONF.register_opts(neutron_client_opts, group='neutron_client')
|
cfg.CONF.register_opts(neutron_client_opts, group='neutron_client')
|
||||||
|
cfg.CONF.register_opts(cinder_client_opts, group='cinder_client')
|
||||||
|
|
||||||
|
|
||||||
class OpenStackClients(object):
|
class OpenStackClients(object):
|
||||||
@ -134,6 +141,10 @@ class OpenStackClients(object):
|
|||||||
endpoint_type=endpoint_type,
|
endpoint_type=endpoint_type,
|
||||||
region_name=region_name)
|
region_name=region_name)
|
||||||
|
|
||||||
|
def cinder_region_name(self):
|
||||||
|
cinder_region_name = self._get_client_option('cinder', 'region_name')
|
||||||
|
return self.keystone().get_validate_region_name(cinder_region_name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def auth_url(self):
|
def auth_url(self):
|
||||||
return self.keystone().auth_url
|
return self.keystone().auth_url
|
||||||
|
@ -564,3 +564,7 @@ class TrusteeDeleteFailed(MagnumException):
|
|||||||
class QuotaAlreadyExists(Conflict):
|
class QuotaAlreadyExists(Conflict):
|
||||||
message = _("Quota for project %(project_id)s already exists "
|
message = _("Quota for project %(project_id)s already exists "
|
||||||
"for resource %(resource)s.")
|
"for resource %(resource)s.")
|
||||||
|
|
||||||
|
|
||||||
|
class RegionsListFailed(MagnumException):
|
||||||
|
message = _("Failed to list regions.")
|
||||||
|
@ -196,3 +196,28 @@ class KeystoneClientV3(object):
|
|||||||
except Exception:
|
except Exception:
|
||||||
LOG.exception(_LE('Failed to delete trustee'))
|
LOG.exception(_LE('Failed to delete trustee'))
|
||||||
raise exception.TrusteeDeleteFailed(trustee_id=trustee_id)
|
raise exception.TrusteeDeleteFailed(trustee_id=trustee_id)
|
||||||
|
|
||||||
|
def get_validate_region_name(self, region_name):
|
||||||
|
if region_name is None:
|
||||||
|
message = _("region_name needs to be configured in magnum.conf")
|
||||||
|
raise exception.InvalidParameterValue(message)
|
||||||
|
"""matches the region of a public endpoint for the Keystone
|
||||||
|
service."""
|
||||||
|
try:
|
||||||
|
regions = self.client.regions.list()
|
||||||
|
except kc_exception.NotFound:
|
||||||
|
pass
|
||||||
|
except Exception:
|
||||||
|
LOG.exception(_LE('Failed to list regions'))
|
||||||
|
raise exception.RegionsListFailed()
|
||||||
|
region_list = []
|
||||||
|
for region in regions:
|
||||||
|
region_list.append(region.id)
|
||||||
|
if region_name not in region_list:
|
||||||
|
raise exception.InvalidParameterValue(_(
|
||||||
|
'region_name %(region_name)s is invalid, '
|
||||||
|
'expecting a region_name in %(region_name_list)s.') % {
|
||||||
|
'region_name': region_name,
|
||||||
|
'region_name_list': '/'.join(
|
||||||
|
region_list + ['unspecified'])})
|
||||||
|
return region_name
|
||||||
|
@ -139,3 +139,30 @@ class KeystoneClientTest(base.BaseTestCase):
|
|||||||
trustor_user='123456', project='654321',
|
trustor_user='123456', project='654321',
|
||||||
trustee_user='888888', role_names=['role3'],
|
trustee_user='888888', role_names=['role3'],
|
||||||
impersonation=True)
|
impersonation=True)
|
||||||
|
|
||||||
|
def test_get_validate_region_name(self, mock_ks):
|
||||||
|
key = 'region_name'
|
||||||
|
val = 'RegionOne'
|
||||||
|
cfg.CONF.set_override(key, val, 'cinder_client')
|
||||||
|
mock_region = mock.MagicMock()
|
||||||
|
mock_region.id = 'RegionOne'
|
||||||
|
mock_ks.return_value.regions.list.return_value = [mock_region]
|
||||||
|
ks_client = keystone.KeystoneClientV3(self.ctx)
|
||||||
|
region_name = ks_client.get_validate_region_name(val)
|
||||||
|
self.assertEqual('RegionOne', region_name)
|
||||||
|
|
||||||
|
def test_get_validate_region_name_not_found(self, mock_ks):
|
||||||
|
key = 'region_name'
|
||||||
|
val = 'region123'
|
||||||
|
cfg.CONF.set_override(key, val, 'cinder_client')
|
||||||
|
ks_client = keystone.KeystoneClientV3(self.ctx)
|
||||||
|
self.assertRaises(exception.InvalidParameterValue,
|
||||||
|
ks_client.get_validate_region_name, val)
|
||||||
|
|
||||||
|
def test_get_validate_region_name_is_None(self, mock_ks):
|
||||||
|
key = 'region_name'
|
||||||
|
val = None
|
||||||
|
cfg.CONF.set_override(key, val, 'cinder_client')
|
||||||
|
ks_client = keystone.KeystoneClientV3(self.ctx)
|
||||||
|
self.assertRaises(exception.InvalidParameterValue,
|
||||||
|
ks_client.get_validate_region_name, val)
|
||||||
|
Loading…
Reference in New Issue
Block a user