瀏覽代碼

Added CloudResource as base class to all resources. Renamed
ProviderService to CloudService for consistency.

Nuwan Goonasekera 10 年之前
父節點
當前提交
6062530400
共有 3 個文件被更改,包括 95 次插入51 次删除
  1. 38 26
      cloudbridge/cloud/base.py
  2. 44 12
      cloudbridge/cloud/interfaces/resources.py
  3. 13 13
      cloudbridge/cloud/interfaces/services.py

+ 38 - 26
cloudbridge/cloud/base.py

@@ -14,6 +14,7 @@ from cloudbridge.cloud.interfaces.resources \
     import InvalidConfigurationException
 from cloudbridge.cloud.interfaces.resources import Bucket
 from cloudbridge.cloud.interfaces.resources import BucketObject
+from cloudbridge.cloud.interfaces.resources import CloudResource
 from cloudbridge.cloud.interfaces.resources import Configuration
 from cloudbridge.cloud.interfaces.resources import Instance
 from cloudbridge.cloud.interfaces.resources import InstanceState
@@ -35,13 +36,13 @@ from cloudbridge.cloud.interfaces.resources import Volume
 from cloudbridge.cloud.interfaces.resources import VolumeState
 from cloudbridge.cloud.interfaces.resources import WaitStateException
 from cloudbridge.cloud.interfaces.services import BlockStoreService
+from cloudbridge.cloud.interfaces.services import CloudService
 from cloudbridge.cloud.interfaces.services import ComputeService
 from cloudbridge.cloud.interfaces.services import ImageService
 from cloudbridge.cloud.interfaces.services import InstanceService
 from cloudbridge.cloud.interfaces.services import InstanceTypesService
 from cloudbridge.cloud.interfaces.services import KeyPairService
 from cloudbridge.cloud.interfaces.services import ObjectStoreService
-from cloudbridge.cloud.interfaces.services import ProviderService
 from cloudbridge.cloud.interfaces.services import RegionService
 from cloudbridge.cloud.interfaces.services import SecurityGroupService
 from cloudbridge.cloud.interfaces.services import SecurityService
@@ -137,6 +138,16 @@ class BaseCloudProvider(CloudProvider):
                 default_value
 
 
+class BaseCloudResource(CloudResource):
+
+    def __init__(self, provider):
+        self.__provider = provider
+
+    @property
+    def _provider(self):
+        return self.__provider
+
+
 class BaseObjectLifeCycleMixin(ObjectLifeCycleMixin):
     """
     A base implementation of an ObjectLifeCycleMixin.
@@ -285,10 +296,10 @@ class BasePageableObjectMixin(PageableObjectMixin):
                 yield result
 
 
-class BaseInstanceType(InstanceType):
+class BaseInstanceType(InstanceType, BaseCloudResource):
 
     def __init__(self, provider):
-        self._provider = provider
+        super(BaseInstanceType, self).__init__(provider)
 
     def __eq__(self, other):
         return (isinstance(other, InstanceType) and
@@ -305,10 +316,10 @@ class BaseInstanceType(InstanceType):
                                             self.name, self.id)
 
 
-class BaseInstance(BaseObjectLifeCycleMixin, Instance):
+class BaseInstance(BaseCloudResource, BaseObjectLifeCycleMixin, Instance):
 
     def __init__(self, provider):
-        self._provider = provider
+        super(BaseInstance, self).__init__(provider)
 
     def __eq__(self, other):
         return (isinstance(other, Instance) and
@@ -400,10 +411,11 @@ class BaseLaunchConfig(LaunchConfig):
         self.network_interfaces.append(net_id)
 
 
-class BaseMachineImage(BaseObjectLifeCycleMixin, MachineImage):
+class BaseMachineImage(
+        BaseCloudResource, BaseObjectLifeCycleMixin, MachineImage):
 
     def __init__(self, provider):
-        self._provider = provider
+        super(BaseMachineImage, self).__init__(provider)
 
     def __eq__(self, other):
         return (isinstance(other, MachineImage) and
@@ -427,10 +439,10 @@ class BaseMachineImage(BaseObjectLifeCycleMixin, MachineImage):
                                             self.name, self.id)
 
 
-class BaseVolume(BaseObjectLifeCycleMixin, Volume):
+class BaseVolume(BaseCloudResource, BaseObjectLifeCycleMixin, Volume):
 
     def __init__(self, provider):
-        self._provider = provider
+        super(BaseVolume, self).__init__(provider)
 
     def __eq__(self, other):
         return (isinstance(other, Volume) and
@@ -453,10 +465,10 @@ class BaseVolume(BaseObjectLifeCycleMixin, Volume):
                                             self.name, self.id)
 
 
-class BaseSnapshot(BaseObjectLifeCycleMixin, Snapshot):
+class BaseSnapshot(BaseCloudResource, BaseObjectLifeCycleMixin, Snapshot):
 
     def __init__(self, provider):
-        self._provider = provider
+        super(BaseSnapshot, self).__init__(provider)
 
     def __eq__(self, other):
         return (isinstance(other, Snapshot) and
@@ -479,10 +491,10 @@ class BaseSnapshot(BaseObjectLifeCycleMixin, Snapshot):
                                             self.name, self.id)
 
 
-class BaseKeyPair(KeyPair):
+class BaseKeyPair(KeyPair, BaseCloudResource):
 
     def __init__(self, provider, key_pair):
-        self._provider = provider
+        super(BaseKeyPair, self).__init__(provider)
         self._key_pair = key_pair
 
     def __eq__(self, other):
@@ -520,10 +532,10 @@ class BaseKeyPair(KeyPair):
         return "<CBKeyPair: {0}>".format(self.name)
 
 
-class BaseSecurityGroup(SecurityGroup):
+class BaseSecurityGroup(SecurityGroup, BaseCloudResource):
 
     def __init__(self, provider, security_group):
-        self._provider = provider
+        super(BaseSecurityGroup, self).__init__(provider)
         self._security_group = security_group
 
     def __eq__(self, other):
@@ -574,10 +586,10 @@ class BaseSecurityGroup(SecurityGroup):
                                       self.id)
 
 
-class BaseSecurityGroupRule(SecurityGroupRule):
+class BaseSecurityGroupRule(SecurityGroupRule, BaseCloudResource):
 
     def __init__(self, provider, rule, parent):
-        self._provider = provider
+        super(BaseSecurityGroupRule, self).__init__(provider)
         self._rule = rule
         self.parent = parent
 
@@ -606,10 +618,10 @@ class BaseSecurityGroupRule(SecurityGroupRule):
                                              self.group))
 
 
-class BasePlacementZone(PlacementZone):
+class BasePlacementZone(PlacementZone, BaseCloudResource):
 
     def __init__(self, provider):
-        self._provider = provider
+        super(BasePlacementZone, self).__init__(provider)
 
     def __repr__(self):
         return "<CB-{0}: {1}>".format(self.__class__.__name__,
@@ -622,10 +634,10 @@ class BasePlacementZone(PlacementZone):
                 self.id == other.id)
 
 
-class BaseRegion(Region):
+class BaseRegion(Region, BaseCloudResource):
 
     def __init__(self, provider):
-        self._provider = provider
+        super(BaseRegion, self).__init__(provider)
 
     def __repr__(self):
         return "<CB-{0}: {1}>".format(self.__class__.__name__,
@@ -638,10 +650,10 @@ class BaseRegion(Region):
                 self.id == other.id)
 
 
-class BaseBucketObject(BucketObject):
+class BaseBucketObject(BucketObject, BaseCloudResource):
 
     def __init__(self, provider):
-        self._provider = provider
+        super(BaseBucketObject, self).__init__(provider)
 
     def __eq__(self, other):
         return (isinstance(other, BucketObject) and
@@ -656,10 +668,10 @@ class BaseBucketObject(BucketObject):
                                       self.name)
 
 
-class BaseBucket(BasePageableObjectMixin, Bucket):
+class BaseBucket(BasePageableObjectMixin, Bucket, BaseCloudResource):
 
     def __init__(self, provider):
-        self._provider = provider
+        super(BaseBucket, self).__init__(provider)
 
     def __eq__(self, other):
         return (isinstance(other, Bucket) and
@@ -674,7 +686,7 @@ class BaseBucket(BasePageableObjectMixin, Bucket):
                                       self.name)
 
 
-class BaseProviderService(ProviderService):
+class BaseProviderService(CloudService):
 
     def __init__(self, provider):
         self._provider = provider

+ 44 - 12
cloudbridge/cloud/interfaces/resources.py

@@ -24,6 +24,27 @@ class CloudProviderServiceType(object):
     OBJECTSTORE = 'object_store'
 
 
+class CloudResource(object):
+
+    """
+    Base interface for any Resource supported by a provider. This interface
+    has an  _provider property that can be used to access the provider
+    associated with the resource, which is only intended for use by subclasses.
+    """
+    __metaclass__ = ABCMeta
+
+    @abstractproperty
+    def _provider(self):
+        """
+        Returns the provider instance associated with this resource. Intended
+        for use by subclasses only.
+
+        :rtype: :class:`.CloudProvider`
+        :return: a CloudProvider object
+        """
+        pass
+
+
 class CloudBridgeBaseException(Exception):
 
     """
@@ -100,6 +121,17 @@ class ObjectLifeCycleMixin(object):
     """
     __metaclass__ = ABCMeta
 
+    @abstractproperty
+    def _provider(self):
+        """
+        Obtain the provider associated with this object. Used internally
+        to access the provider config and get default timeouts/intervals.
+
+        :rtype: :class:``.CloudProvider``
+        :return: The provider associated with this Resource
+        """
+        pass
+
     @abstractproperty
     def state(self):
         """
@@ -357,7 +389,7 @@ class InstanceState(object):
     ERROR = "error"
 
 
-class Instance(ObjectLifeCycleMixin):
+class Instance(ObjectLifeCycleMixin, CloudResource):
 
     __metaclass__ = ABCMeta
 
@@ -674,7 +706,7 @@ class LaunchConfig(object):
         pass
 
 
-class MachineImage(ObjectLifeCycleMixin):
+class MachineImage(ObjectLifeCycleMixin, CloudResource):
 
     __metaclass__ = ABCMeta
 
@@ -743,7 +775,7 @@ class VolumeState(object):
     ERROR = "error"
 
 
-class Volume(ObjectLifeCycleMixin):
+class Volume(ObjectLifeCycleMixin, CloudResource):
 
     __metaclass__ = ABCMeta
 
@@ -862,7 +894,7 @@ class SnapshotState(object):
     ERROR = "error"
 
 
-class Snapshot(ObjectLifeCycleMixin):
+class Snapshot(ObjectLifeCycleMixin, CloudResource):
 
     __metaclass__ = ABCMeta
 
@@ -957,7 +989,7 @@ class Snapshot(ObjectLifeCycleMixin):
         pass
 
 
-class KeyPair(object):
+class KeyPair(CloudResource):
 
     __metaclass__ = ABCMeta
 
@@ -1003,7 +1035,7 @@ class KeyPair(object):
         pass
 
 
-class Region(object):
+class Region(CloudResource):
 
     """
     Represents a cloud region, typically a separate geographic area and will
@@ -1042,7 +1074,7 @@ class Region(object):
         pass
 
 
-class PlacementZone(object):
+class PlacementZone(CloudResource):
 
     """
     Represents a placement zone. A placement zone is contained within a Region.
@@ -1080,7 +1112,7 @@ class PlacementZone(object):
         pass
 
 
-class InstanceType(object):
+class InstanceType(CloudResource):
 
     """
     An instance type object.
@@ -1181,7 +1213,7 @@ class InstanceType(object):
         pass
 
 
-class SecurityGroup(object):
+class SecurityGroup(CloudResource):
 
     __metaclass__ = ABCMeta
 
@@ -1267,7 +1299,7 @@ class SecurityGroup(object):
         pass
 
 
-class SecurityGroupRule(object):
+class SecurityGroupRule(CloudResource):
 
     """
     Represents a security group rule.
@@ -1313,7 +1345,7 @@ class SecurityGroupRule(object):
         pass
 
 
-class BucketObject(object):
+class BucketObject(CloudResource):
 
     """
     Represents an object stored within a bucket.
@@ -1372,7 +1404,7 @@ class BucketObject(object):
         pass
 
 
-class Bucket(PageableObjectMixin):
+class Bucket(PageableObjectMixin, CloudResource):
 
     __metaclass__ = ABCMeta
 

+ 13 - 13
cloudbridge/cloud/interfaces/services.py

@@ -5,7 +5,7 @@ from abc import ABCMeta, abstractmethod, abstractproperty
 from cloudbridge.cloud.interfaces.resources import PageableObjectMixin
 
 
-class ProviderService(object):
+class CloudService(object):
 
     """
     Base interface for any service supported by a provider. This interface
@@ -25,7 +25,7 @@ class ProviderService(object):
         pass
 
 
-class ComputeService(ProviderService):
+class ComputeService(CloudService):
     """
     The compute service interface is a collection of services that provides
     access to the underlying compute related services in a provider. For
@@ -124,7 +124,7 @@ class ComputeService(ProviderService):
         pass
 
 
-class InstanceService(PageableObjectMixin, ProviderService):
+class InstanceService(PageableObjectMixin, CloudService):
     """
     Provides access to instances in a provider, including creating,
     listing and deleting instances.
@@ -258,7 +258,7 @@ class InstanceService(PageableObjectMixin, ProviderService):
         pass
 
 
-class VolumeService(PageableObjectMixin, ProviderService):
+class VolumeService(PageableObjectMixin, CloudService):
 
     """
     Base interface for a Volume Service
@@ -321,7 +321,7 @@ class VolumeService(PageableObjectMixin, ProviderService):
         pass
 
 
-class SnapshotService(PageableObjectMixin, ProviderService):
+class SnapshotService(PageableObjectMixin, CloudService):
 
     """
     Base interface for a Snapshot Service
@@ -381,7 +381,7 @@ class SnapshotService(PageableObjectMixin, ProviderService):
         pass
 
 
-class BlockStoreService(ProviderService):
+class BlockStoreService(CloudService):
 
     """
     The Block Store Service interface provides access to block device services,
@@ -434,7 +434,7 @@ class BlockStoreService(ProviderService):
         pass
 
 
-class ImageService(PageableObjectMixin, ProviderService):
+class ImageService(PageableObjectMixin, CloudService):
 
     """
     Base interface for an Image Service
@@ -473,7 +473,7 @@ class ImageService(PageableObjectMixin, ProviderService):
         pass
 
 
-class ObjectStoreService(PageableObjectMixin, ProviderService):
+class ObjectStoreService(PageableObjectMixin, CloudService):
 
     """
     The Object Storage Service interface provides access to the underlying
@@ -563,7 +563,7 @@ class ObjectStoreService(PageableObjectMixin, ProviderService):
         pass
 
 
-class SecurityService(ProviderService):
+class SecurityService(CloudService):
 
     """
     The security service interface can be used to access security related
@@ -616,7 +616,7 @@ class SecurityService(ProviderService):
         pass
 
 
-class KeyPairService(PageableObjectMixin, ProviderService):
+class KeyPairService(PageableObjectMixin, CloudService):
 
     """
     Base interface for key pairs.
@@ -691,7 +691,7 @@ class KeyPairService(PageableObjectMixin, ProviderService):
         pass
 
 
-class SecurityGroupService(PageableObjectMixin, ProviderService):
+class SecurityGroupService(PageableObjectMixin, CloudService):
 
     """
     Base interface for security groups.
@@ -773,7 +773,7 @@ class SecurityGroupService(PageableObjectMixin, ProviderService):
         pass
 
 
-class InstanceTypesService(PageableObjectMixin, ProviderService):
+class InstanceTypesService(PageableObjectMixin, CloudService):
     __metaclass__ = ABCMeta
 
     @abstractmethod
@@ -797,7 +797,7 @@ class InstanceTypesService(PageableObjectMixin, ProviderService):
         pass
 
 
-class RegionService(PageableObjectMixin, ProviderService):
+class RegionService(PageableObjectMixin, CloudService):
 
     """
     Base interface for a Region service