|
|
@@ -24,17 +24,20 @@ class CloudProviderFactory(object):
|
|
|
:rtype: list
|
|
|
:return: A list of available providers and their interface versions.
|
|
|
"""
|
|
|
- return [{"name": ProviderList.OPENSTACK,
|
|
|
- "implementations":
|
|
|
- [{"class":
|
|
|
- "cloudbridge.providers.openstack.OpenStackCloudProviderV1",
|
|
|
- "version": 1}]},
|
|
|
- {"name": ProviderList.AWS,
|
|
|
- "implementations":
|
|
|
- [{"class": "cloudbridge.providers.aws.AWSCloudProviderV1",
|
|
|
- "version": 1}]}]
|
|
|
-
|
|
|
- def find_provider_impl(self, name, version=None):
|
|
|
+ return [
|
|
|
+ {"name": ProviderList.OPENSTACK,
|
|
|
+ "implementations":
|
|
|
+ [{"class":
|
|
|
+ "cloudbridge.providers.openstack.OpenStackCloudProviderV1",
|
|
|
+ "version": 1}]},
|
|
|
+ {"name": ProviderList.AWS,
|
|
|
+ "implementations":
|
|
|
+ [{"class": "cloudbridge.providers.aws.AWSCloudProviderV1",
|
|
|
+ "mock_class":
|
|
|
+ "cloudbridge.providers.aws.MockAWSCloudProvider",
|
|
|
+ "version": 1}]}]
|
|
|
+
|
|
|
+ def find_provider_impl(self, name, version=None, get_mock=False):
|
|
|
"""
|
|
|
Finds a provider implementation class given its name.
|
|
|
|
|
|
@@ -46,6 +49,10 @@ class CloudProviderFactory(object):
|
|
|
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.
|
|
|
+
|
|
|
:rtype: ``None`` or str
|
|
|
:return: If found, return a module (including class name) of the
|
|
|
provider or ``None`` if the provider was not found.
|
|
|
@@ -56,14 +63,21 @@ class CloudProviderFactory(object):
|
|
|
match = [item for item in provider["implementations"]
|
|
|
if item["version"] == version]
|
|
|
if match:
|
|
|
- return match[0]["class"]
|
|
|
+ if get_mock and match[0].get("mock_class"):
|
|
|
+ return match[0]["mock_class"]
|
|
|
+ else:
|
|
|
+ return match[0]["class"]
|
|
|
else:
|
|
|
return None
|
|
|
else:
|
|
|
# Return latest available version
|
|
|
- return sorted(
|
|
|
+ latest_version = sorted(
|
|
|
(item for item in provider["implementations"]),
|
|
|
- key=lambda x: x["version"])[-1]["class"]
|
|
|
+ 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 None
|
|
|
|
|
|
def create_provider(self, name, config, version=None):
|
|
|
@@ -98,25 +112,47 @@ class CloudProviderFactory(object):
|
|
|
class_name)
|
|
|
return provider_class
|
|
|
|
|
|
- def get_provider_class(self, name, version=None):
|
|
|
+ def get_provider_class(self, name, version=None, get_mock=False):
|
|
|
"""
|
|
|
Return a class for the requested provider.
|
|
|
|
|
|
+ :type get_mock: ``bool``
|
|
|
+ :param get_mock: If True, returns a mock version of the provider
|
|
|
+ if available, or the real version if not.
|
|
|
+
|
|
|
:rtype: provider class or ``None``
|
|
|
:return: A class corresponding to the requested provider or ``None``
|
|
|
if the provider was not found.
|
|
|
"""
|
|
|
- provider_class = self.find_provider_impl(name, version)
|
|
|
+ provider_class = self.find_provider_impl(
|
|
|
+ name,
|
|
|
+ version,
|
|
|
+ get_mock=get_mock)
|
|
|
if provider_class:
|
|
|
return self._get_provider_class(provider_class)
|
|
|
return None
|
|
|
|
|
|
- def get_all_provider_classes(self):
|
|
|
+ def get_all_provider_classes(self, get_mock=False):
|
|
|
"""
|
|
|
Returns a list of classes for all available provider implementations
|
|
|
+
|
|
|
+ :type get_mock: ``bool``
|
|
|
+ :param get_mock: If True, returns a mock version of the provider
|
|
|
+ if available, or the real version if not.
|
|
|
+
|
|
|
+ :rtype: type ``class`` or ``None``
|
|
|
+ :return: A list of all available provider classes or an empty list
|
|
|
+ if none found.
|
|
|
"""
|
|
|
all_providers = []
|
|
|
for provider in self.list_providers():
|
|
|
for impl in provider["implementations"]:
|
|
|
- all_providers.append(self._get_provider_class(impl["class"]))
|
|
|
+ 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"]))
|
|
|
return all_providers
|