Move _get_region() to NegativeRestClient

_get_region() was used for getting a region from CONF for each project,
but most projects' sections contain a region value and it is easy to
specify its value instead of _get_region().
In addition, RestClient will become a tempest-lib class and it is needed
to separate CONF values from a RestClient class.
This patch moves _get_region() to NegativeRestClient and makes each client
specify its own CONF value.

Change-Id: Ib26badf64e7cddf4158e4720e193b3129e8fdb12
This commit is contained in:
Ken'ichi Ohmichi 2015-01-05 04:57:26 +00:00
parent 179ea57f7a
commit e9f50413ad
18 changed files with 66 additions and 39 deletions

View File

@ -78,10 +78,12 @@ class RestClient(object):
LOG = logging.getLogger(__name__)
def __init__(self, auth_provider, service, endpoint_type='publicURL',
def __init__(self, auth_provider, service, region,
endpoint_type='publicURL',
build_interval=1, build_timeout=60):
self.auth_provider = auth_provider
self.service = service
self.region = region
self.endpoint_type = endpoint_type
self.build_interval = build_interval
self.build_timeout = build_timeout
@ -124,21 +126,6 @@ class RestClient(object):
str(self.token)[0:STRING_LIMIT],
str(self.get_headers())[0:STRING_LIMIT])
def _get_region(self, service):
"""
Returns the region for a specific service
"""
service_region = None
for cfgname in dir(CONF._config):
# Find all config.FOO.catalog_type and assume FOO is a service.
cfg = getattr(CONF, cfgname)
catalog_type = getattr(cfg, 'catalog_type', None)
if catalog_type == service:
service_region = getattr(cfg, 'region', None)
if not service_region:
service_region = CONF.identity.region
return service_region
@property
def user(self):
return self.auth_provider.credentials.username
@ -172,7 +159,7 @@ class RestClient(object):
_filters = dict(
service=self.service,
endpoint_type=self.endpoint_type,
region=self._get_region(self.service)
region=self.region
)
if self.api_version is not None:
_filters['api_version'] = self.api_version
@ -609,6 +596,27 @@ class NegativeRestClient(RestClient):
"""
Version of RestClient that does not raise exceptions.
"""
def __init__(self, auth_provider, service):
region = self._get_region(service)
super(NegativeRestClient, self).__init__(auth_provider,
service, region)
def _get_region(self, service):
"""
Returns the region for a specific service
"""
service_region = None
for cfgname in dir(CONF._config):
# Find all config.FOO.catalog_type and assume FOO is a service.
cfg = getattr(CONF, cfgname)
catalog_type = getattr(cfg, 'catalog_type', None)
if catalog_type == service:
service_region = getattr(cfg, 'region', None)
if not service_region:
service_region = CONF.identity.region
return service_region
def _error_checker(self, method, url,
headers, body, resp, resp_body):
pass

View File

@ -50,7 +50,9 @@ class BaremetalClient(rest_client.RestClient):
def __init__(self, auth_provider):
super(BaremetalClient, self).__init__(
auth_provider, CONF.baremetal.catalog_type,
auth_provider,
CONF.baremetal.catalog_type,
CONF.identity.region,
endpoint_type=CONF.baremetal.endpoint_type)
self.uri_prefix = ''

View File

@ -33,6 +33,7 @@ class ComputeClient(rest_client.RestClient):
super(ComputeClient, self).__init__(
auth_provider,
CONF.compute.catalog_type,
CONF.compute.region or CONF.identity.region,
endpoint_type=CONF.compute.endpoint_type,
build_interval=build_interval,
build_timeout=build_timeout)

View File

@ -24,7 +24,9 @@ class DataProcessingClient(rest_client.RestClient):
def __init__(self, auth_provider):
super(DataProcessingClient, self).__init__(
auth_provider, CONF.data_processing.catalog_type,
auth_provider,
CONF.data_processing.catalog_type,
CONF.identity.region,
endpoint_type=CONF.data_processing.endpoint_type)
def _request_and_check_resp(self, request_func, uri, resp_status):

View File

@ -25,7 +25,9 @@ class DatabaseFlavorsClientJSON(rest_client.RestClient):
def __init__(self, auth_provider):
super(DatabaseFlavorsClientJSON, self).__init__(
auth_provider, CONF.database.catalog_type)
auth_provider,
CONF.database.catalog_type,
CONF.identity.region)
def list_db_flavors(self, params=None):
url = 'flavors'

View File

@ -25,7 +25,9 @@ class DatabaseVersionsClientJSON(rest_client.RestClient):
def __init__(self, auth_provider):
super(DatabaseVersionsClientJSON, self).__init__(
auth_provider, CONF.database.catalog_type)
auth_provider,
CONF.database.catalog_type,
CONF.identity.region)
self.skip_path()
def list_db_versions(self, params=None):

View File

@ -22,9 +22,11 @@ CONF = config.CONF
class IdentityClientJSON(rest_client.RestClient):
def __init__(self, auth_provider):
super(IdentityClientJSON, self).__init__(auth_provider,
CONF.identity.catalog_type,
endpoint_type='adminURL')
super(IdentityClientJSON, self).__init__(
auth_provider,
CONF.identity.catalog_type,
CONF.identity.region,
endpoint_type='adminURL')
def has_admin_extensions(self):
"""

View File

@ -24,7 +24,9 @@ class IdentityV3Client(rest_client.RestClient):
"""
def __init__(self, auth_provider):
super(IdentityV3Client, self).__init__(auth_provider,
CONF.identity.catalog_type,
endpoint_type='adminURL')
super(IdentityV3Client, self).__init__(
auth_provider,
CONF.identity.catalog_type,
CONF.identity.region,
endpoint_type='adminURL')
self.api_version = "v3"

View File

@ -523,7 +523,7 @@ class IdentityV3ClientJSON(base.IdentityV3Client):
class V3TokenClientJSON(rest_client.RestClient):
def __init__(self):
super(V3TokenClientJSON, self).__init__(None, None)
super(V3TokenClientJSON, self).__init__(None, None, None)
auth_url = CONF.identity.uri_v3
if not auth_url:
raise exceptions.InvalidConfiguration('you must specify a v3 uri '

View File

@ -38,6 +38,7 @@ class ImageClientJSON(rest_client.RestClient):
super(ImageClientJSON, self).__init__(
auth_provider,
CONF.image.catalog_type,
CONF.image.region or CONF.identity.region,
endpoint_type=CONF.image.endpoint_type)
self._http = None

View File

@ -32,6 +32,7 @@ class ImageClientV2JSON(rest_client.RestClient):
super(ImageClientV2JSON, self).__init__(
auth_provider,
CONF.image.catalog_type,
CONF.image.region or CONF.identity.region,
endpoint_type=CONF.image.endpoint_type)
self._http = None

View File

@ -28,8 +28,10 @@ CONF = config.CONF
class MessagingClientJSON(rest_client.RestClient):
def __init__(self, auth_provider):
super(MessagingClientJSON, self).__init__(auth_provider,
CONF.messaging.catalog_type)
super(MessagingClientJSON, self).__init__(
auth_provider,
CONF.messaging.catalog_type,
CONF.identity.region)
self.version = '1'
self.uri_prefix = 'v{0}'.format(self.version)

View File

@ -39,7 +39,9 @@ class NetworkClientJSON(rest_client.RestClient):
def __init__(self, auth_provider):
super(NetworkClientJSON, self).__init__(
auth_provider, CONF.network.catalog_type,
auth_provider,
CONF.network.catalog_type,
CONF.network.region or CONF.identity.region,
endpoint_type=CONF.network.endpoint_type,
build_interval=CONF.network.build_interval,
build_timeout=CONF.network.build_timeout)

View File

@ -25,6 +25,8 @@ class ObjectStorageClient(rest_client.RestClient):
def __init__(self, auth_provider):
super(ObjectStorageClient, self).__init__(
auth_provider, CONF.object_storage.catalog_type,
auth_provider,
CONF.object_storage.catalog_type,
CONF.object_storage.region or CONF.identity.region,
endpoint_type=CONF.object_storage.endpoint_type)
self.format = 'json'

View File

@ -31,6 +31,7 @@ class OrchestrationClient(rest_client.RestClient):
super(OrchestrationClient, self).__init__(
auth_provider,
CONF.orchestration.catalog_type,
CONF.orchestration.region or CONF.identity.region,
endpoint_type=CONF.orchestration.endpoint_type,
build_interval=CONF.orchestration.build_interval,
build_timeout=CONF.orchestration.build_timeout)

View File

@ -28,6 +28,7 @@ class TelemetryClientJSON(rest_client.RestClient):
super(TelemetryClientJSON, self).__init__(
auth_provider,
CONF.telemetry.catalog_type,
CONF.identity.region,
endpoint_type=CONF.telemetry.endpoint_type)
self.version = '2'
self.uri_prefix = "v%s" % self.version

View File

@ -27,6 +27,7 @@ class VolumeClient(rest_client.RestClient):
super(VolumeClient, self).__init__(
auth_provider,
CONF.volume.catalog_type,
CONF.volume.region or CONF.identity.region,
endpoint_type=CONF.volume.endpoint_type,
build_interval=CONF.volume.build_interval,
build_timeout=CONF.volume.build_timeout)

View File

@ -30,18 +30,13 @@ class BaseRestClientTestClass(base.TestCase):
url = 'fake_endpoint'
def _get_region(self):
return 'fake region'
def setUp(self):
super(BaseRestClientTestClass, self).setUp()
self.useFixture(fake_config.ConfigFixture())
self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
self.rest_client = rest_client.RestClient(
fake_auth_provider.FakeAuthProvider(), None)
fake_auth_provider.FakeAuthProvider(), None, None)
self.stubs.Set(httplib2.Http, 'request', self.fake_http.request)
self.useFixture(mockpatch.PatchObject(self.rest_client, '_get_region',
side_effect=self._get_region()))
self.useFixture(mockpatch.PatchObject(self.rest_client,
'_log_request'))
@ -304,7 +299,7 @@ class TestRestClientErrorCheckerJSON(base.TestCase):
self.useFixture(fake_config.ConfigFixture())
self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
self.rest_client = rest_client.RestClient(
fake_auth_provider.FakeAuthProvider(), None)
fake_auth_provider.FakeAuthProvider(), None, None)
def test_response_less_than_400(self):
self.rest_client._error_checker(**self.set_data("399"))