| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- """
- Specification for a provider interface
- """
- from abc import ABCMeta, abstractmethod, abstractproperty
- class CloudProvider(object):
- """
- Base interface for a cloud provider
- """
- __metaclass__ = ABCMeta
- @abstractmethod
- 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, grouped under `cloud_properties` and
- `credentials` keys. 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['credentials'].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
- 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
- def has_service(self, service_type):
- """
- Checks whether this provider supports a given service.
- Example:
- .. code-block:: python
- if provider.has_service(CloudServiceType.BUCKET):
- print("Provider supports object store services")
- provider.storage.buckets.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()
- vm_types = provider.compute.vm_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 networking(self):
- """
- Provide access to all network related services in this provider.
- Example:
- .. code-block:: python
- networks = provider.networking.networks.list()
- subnets = provider.networking.subnets.list()
- routers = provider.networking.routers.list()
- :rtype: :class:`.NetworkingService`
- :return: a NetworkingService object
- """
- @abstractproperty
- def security(self):
- """
- Provides access to key pair management and firewall control
- Example:
- .. code-block:: python
- keypairs = provider.security.keypairs.list()
- vm_firewalls = provider.security.vm_firewalls.list()
- :rtype: ``object`` of :class:`.SecurityService`
- :return: a SecurityService object
- """
- pass
- @abstractproperty
- def storage(self):
- """
- Provides access to storage related services in this provider.
- This includes the volume, snapshot and bucket services,
- Example:
- .. code-block:: python
- volumes = provider.storage.volumes.list()
- snapshots = provider.storage.snapshots.list()
- if provider.has_service(CloudServiceType.BUCKET):
- print("Provider supports object store services")
- print(provider.storage.buckets.list())
- :rtype: :class:`.StorageService`
- :return: a StorageService 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')
- 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
|