Source code for cloudbridge.cloud.interfaces.provider

"""
Specification for a provider interface
"""
from abc import ABCMeta, abstractmethod, abstractproperty


[docs]class CloudProvider(object): """ Base interface for a cloud provider """ __metaclass__ = ABCMeta @abstractmethod
[docs] def __init__(self, config): """ Create a new provider instance given a dictionary of configuration attributes. :type config: :class:`dict` :param config: A dictionary object containing provider initialization values. Alternatively, this can be a Bunch or any other object whose fields can be accessed as members. See specific provider implementation for the required fields. :rtype: :class:`.CloudProvider` :return: a concrete provider instance """ pass
@abstractproperty def config(self): """ Returns the config object associated with this provider. This object is a subclass of :class:`dict` and will contain the properties provided at initialization time. In addition, it also contains extra provider-wide properties such as the default result limit for list() queries. Example: .. code-block:: python config = { 'aws_access_key' : '<my_key>' } provider = factory.create_provider(ProviderList.AWS, config) print(provider.config.get('aws_access_key')) print(provider.config.default_result_limit)) # change provider result limit provider.config.default_result_limit = 100 :rtype: :class:`.Configuration` :return: An object of class Configuration, which contains the values used to initialize the provider, as well as other global configuration properties. """ @abstractmethod
[docs] def authenticate(self): """ Checks whether a provider can be successfully authenticated with the configured settings. Clients are *not* required to call this method prior to accessing provider services, as most cloud connections are initialized lazily. The authenticate() method will return True if cloudbridge can establish a successful connection to the provider. It will raise an exception with the appropriate error details otherwise. Example: .. code-block:: python try: if provider.authenticate(): print("Provider connection successful") except ProviderConnectionException as e: print("Could not authenticate with provider: %s" % (e, )) :rtype: :class:`bool` :return: ``True`` if authentication is successful. """ pass
@abstractmethod
[docs] def has_service(self, service_type): """ Checks whether this provider supports a given service. Example: .. code-block:: python if provider.has_service(CloudServiceType.OBJECT_STORE): print("Provider supports object store services") provider.object_store.list() :type service_type: :class:`.CloudServiceType` :param service_type: Type of service to check support for. :rtype: :class:`bool` :return: ``True`` if the service type is supported. """ pass
# @abstractproperty # def account(self): # """ # Provides access to all user account related services in this # provider. This includes listing available tenancies. # # :rtype: ``object`` of :class:`.ComputeService` # :return: a ComputeService object # """ # pass @abstractproperty def compute(self): """ Provides access to all compute related services in this provider. Example: .. code-block:: python regions = provider.compute.regions.list() instance_types = provider.compute.instance_types.list() instances = provider.compute.instances.list() images = provider.compute.images.list() # Alternatively for instance in provider.compute.instances: print(instance.name) :rtype: :class:`.ComputeService` :return: a ComputeService object """ pass @abstractproperty def network(self): """ Provide access to all network related services in this provider. Example: .. code-block:: python networks = provider.network.list() network = provider.network.create(name="DevNet") :rtype: :class:`.NetworkService` :return: a NetworkService object """ @abstractproperty def security(self): """ Provides access to key pair management and firewall control Example: .. code-block:: python keypairs = provider.security.keypairs.list() security_groups = provider.security.security_groups.list() :rtype: ``object`` of :class:`.SecurityService` :return: a SecurityService object """ pass @abstractproperty def block_store(self): """ Provides access to the volume and snapshot services in this provider. Example: .. code-block:: python volumes = provider.block_store.volumes.list() snapshots = provider.block_store.snapshots.list() :rtype: :class:`.BlockStoreService` :return: a BlockStoreService object """ pass @abstractproperty def object_store(self): """ Provides access to object storage services in this provider. Example: .. code-block:: python if provider.has_service(CloudServiceType.OBJECT_STORE): print("Provider supports object store services") print(provider.object_store.list()) :rtype: ``object`` of :class:`.ObjectStoreService` :return: an ObjectStoreService object """ pass
class TestMockHelperMixin(object): """ A helper class that providers mock drivers can use to be notified when a test setup/teardown occurs. This is useful when activating libraries like HTTPretty which take over socket communications. """ def setUpMock(self): """ Called before a test is started. """ raise NotImplementedError( 'TestMockHelperMixin.setUpMock not implemented') def tearDownMock(self): """ Called before test teardown. """ raise NotImplementedError( 'TestMockHelperMixin.tearDownMock not implemented by this' ' provider')
[docs]class ContainerProvider(object): """ Represents a container instance, such as Docker or LXC """ __metaclass__ = ABCMeta @abstractmethod def create_container(self): pass @abstractmethod def delete_container(self): pass
class DeploymentProvider(object): """ Represents a deployment provider, such as Ansible or Shell script provider """ __metaclass__ = ABCMeta @abstractmethod def deploy(self, target): """ Deploys on given target, where target is an Instance or Container """ pass