|
|
@@ -26,31 +26,22 @@ class CloudProviderFactory(object):
|
|
|
"""
|
|
|
return [
|
|
|
{"name": ProviderList.OPENSTACK,
|
|
|
- "implementations":
|
|
|
- [{"class":
|
|
|
- "cloudbridge.cloud.providers.openstack.OpenStackCloud"
|
|
|
- "ProviderV1",
|
|
|
- "version": 1}]},
|
|
|
+ "class": "cloudbridge.cloud.providers.openstack.OpenStackCloud"
|
|
|
+ "Provider"
|
|
|
+ },
|
|
|
{"name": ProviderList.AWS,
|
|
|
- "implementations":
|
|
|
- [{"class": "cloudbridge.cloud.providers.aws.AWSCloudProvider"
|
|
|
- "V1",
|
|
|
- "mock_class":
|
|
|
- "cloudbridge.cloud.providers.aws.MockAWSCloudProvider",
|
|
|
- "version": 1}]}]
|
|
|
-
|
|
|
- def find_provider_impl(self, name, version=None, get_mock=False):
|
|
|
+ "class": "cloudbridge.cloud.providers.aws.AWSCloudProvider",
|
|
|
+ "mock_class": "cloudbridge.cloud.providers.aws.MockAWSCloud"
|
|
|
+ "Provider"
|
|
|
+ }]
|
|
|
+
|
|
|
+ def find_provider_impl(self, name, get_mock=False):
|
|
|
"""
|
|
|
Finds a provider implementation class given its name.
|
|
|
|
|
|
:type name: str
|
|
|
:param name: A name of the provider whose implementation to look for.
|
|
|
|
|
|
- :type version: inst
|
|
|
- :param version: A specific version of the provider to look for. If the
|
|
|
- version is not specified, return the latest available
|
|
|
- version.
|
|
|
-
|
|
|
:type get_mock: ``bool``
|
|
|
:param get_mock: If True, returns a mock version of the provider
|
|
|
if available, or the real version if not.
|
|
|
@@ -61,28 +52,13 @@ class CloudProviderFactory(object):
|
|
|
"""
|
|
|
for provider in self.list_providers():
|
|
|
if provider['name'] == name:
|
|
|
- if version:
|
|
|
- match = [item for item in provider["implementations"]
|
|
|
- if item["version"] == version]
|
|
|
- if match:
|
|
|
- if get_mock and match[0].get("mock_class"):
|
|
|
- return match[0]["mock_class"]
|
|
|
- else:
|
|
|
- return match[0]["class"]
|
|
|
- else:
|
|
|
- return None
|
|
|
+ if get_mock and provider.get("mock_class"):
|
|
|
+ return provider["mock_class"]
|
|
|
else:
|
|
|
- # Return latest available version
|
|
|
- latest_version = sorted(
|
|
|
- (item for item in provider["implementations"]),
|
|
|
- key=lambda x: x["version"])[-1]
|
|
|
- if get_mock and latest_version.get("mock_class"):
|
|
|
- return latest_version["mock_class"]
|
|
|
- else:
|
|
|
- return latest_version["class"]
|
|
|
+ return provider["class"]
|
|
|
return None
|
|
|
|
|
|
- def create_provider(self, name, config, version=None):
|
|
|
+ def create_provider(self, name, config):
|
|
|
"""
|
|
|
Searches all available providers for a CloudProvider interface with the
|
|
|
given name, and instantiates it based on the given config dictionary,
|
|
|
@@ -100,10 +76,10 @@ class CloudProviderFactory(object):
|
|
|
:return: a concrete provider instance
|
|
|
:rtype: ``object`` of :class:`.CloudProvider`
|
|
|
"""
|
|
|
- impl = self.find_provider_impl(name, version=version)
|
|
|
+ impl = self.find_provider_impl(name)
|
|
|
if impl is None:
|
|
|
raise NotImplementedError(
|
|
|
- 'A provider by name {0} implementing interface v1 could not be'
|
|
|
+ 'A provider with name {0} could not be'
|
|
|
' found'.format(name))
|
|
|
provider_class = self._get_provider_class(impl)
|
|
|
return provider_class(config)
|
|
|
@@ -114,7 +90,7 @@ class CloudProviderFactory(object):
|
|
|
class_name)
|
|
|
return provider_class
|
|
|
|
|
|
- def get_provider_class(self, name, version=None, get_mock=False):
|
|
|
+ def get_provider_class(self, name, get_mock=False):
|
|
|
"""
|
|
|
Return a class for the requested provider.
|
|
|
|
|
|
@@ -128,7 +104,6 @@ class CloudProviderFactory(object):
|
|
|
"""
|
|
|
provider_class = self.find_provider_impl(
|
|
|
name,
|
|
|
- version,
|
|
|
get_mock=get_mock)
|
|
|
if provider_class:
|
|
|
return self._get_provider_class(provider_class)
|
|
|
@@ -148,13 +123,12 @@ class CloudProviderFactory(object):
|
|
|
"""
|
|
|
all_providers = []
|
|
|
for provider in self.list_providers():
|
|
|
- for impl in provider["implementations"]:
|
|
|
- if get_mock and impl.get("mock_class"):
|
|
|
- all_providers.append(
|
|
|
- self._get_provider_class(
|
|
|
- impl["mock_class"]))
|
|
|
- else:
|
|
|
- all_providers.append(
|
|
|
- self._get_provider_class(
|
|
|
- impl["class"]))
|
|
|
+ if get_mock and provider.get("mock_class"):
|
|
|
+ all_providers.append(
|
|
|
+ self._get_provider_class(
|
|
|
+ provider["mock_class"]))
|
|
|
+ else:
|
|
|
+ all_providers.append(
|
|
|
+ self._get_provider_class(
|
|
|
+ provider["class"]))
|
|
|
return all_providers
|