소스 검색

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

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

@@ -24,6 +24,27 @@ class CloudProviderServiceType(object):
     OBJECTSTORE = 'object_store'
     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):
 class CloudBridgeBaseException(Exception):
 
 
     """
     """
@@ -100,6 +121,17 @@ class ObjectLifeCycleMixin(object):
     """
     """
     __metaclass__ = ABCMeta
     __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
     @abstractproperty
     def state(self):
     def state(self):
         """
         """
@@ -357,7 +389,7 @@ class InstanceState(object):
     ERROR = "error"
     ERROR = "error"
 
 
 
 
-class Instance(ObjectLifeCycleMixin):
+class Instance(ObjectLifeCycleMixin, CloudResource):
 
 
     __metaclass__ = ABCMeta
     __metaclass__ = ABCMeta
 
 
@@ -674,7 +706,7 @@ class LaunchConfig(object):
         pass
         pass
 
 
 
 
-class MachineImage(ObjectLifeCycleMixin):
+class MachineImage(ObjectLifeCycleMixin, CloudResource):
 
 
     __metaclass__ = ABCMeta
     __metaclass__ = ABCMeta
 
 
@@ -743,7 +775,7 @@ class VolumeState(object):
     ERROR = "error"
     ERROR = "error"
 
 
 
 
-class Volume(ObjectLifeCycleMixin):
+class Volume(ObjectLifeCycleMixin, CloudResource):
 
 
     __metaclass__ = ABCMeta
     __metaclass__ = ABCMeta
 
 
@@ -862,7 +894,7 @@ class SnapshotState(object):
     ERROR = "error"
     ERROR = "error"
 
 
 
 
-class Snapshot(ObjectLifeCycleMixin):
+class Snapshot(ObjectLifeCycleMixin, CloudResource):
 
 
     __metaclass__ = ABCMeta
     __metaclass__ = ABCMeta
 
 
@@ -957,7 +989,7 @@ class Snapshot(ObjectLifeCycleMixin):
         pass
         pass
 
 
 
 
-class KeyPair(object):
+class KeyPair(CloudResource):
 
 
     __metaclass__ = ABCMeta
     __metaclass__ = ABCMeta
 
 
@@ -1003,7 +1035,7 @@ class KeyPair(object):
         pass
         pass
 
 
 
 
-class Region(object):
+class Region(CloudResource):
 
 
     """
     """
     Represents a cloud region, typically a separate geographic area and will
     Represents a cloud region, typically a separate geographic area and will
@@ -1042,7 +1074,7 @@ class Region(object):
         pass
         pass
 
 
 
 
-class PlacementZone(object):
+class PlacementZone(CloudResource):
 
 
     """
     """
     Represents a placement zone. A placement zone is contained within a Region.
     Represents a placement zone. A placement zone is contained within a Region.
@@ -1080,7 +1112,7 @@ class PlacementZone(object):
         pass
         pass
 
 
 
 
-class InstanceType(object):
+class InstanceType(CloudResource):
 
 
     """
     """
     An instance type object.
     An instance type object.
@@ -1181,7 +1213,7 @@ class InstanceType(object):
         pass
         pass
 
 
 
 
-class SecurityGroup(object):
+class SecurityGroup(CloudResource):
 
 
     __metaclass__ = ABCMeta
     __metaclass__ = ABCMeta
 
 
@@ -1267,7 +1299,7 @@ class SecurityGroup(object):
         pass
         pass
 
 
 
 
-class SecurityGroupRule(object):
+class SecurityGroupRule(CloudResource):
 
 
     """
     """
     Represents a security group rule.
     Represents a security group rule.
@@ -1313,7 +1345,7 @@ class SecurityGroupRule(object):
         pass
         pass
 
 
 
 
-class BucketObject(object):
+class BucketObject(CloudResource):
 
 
     """
     """
     Represents an object stored within a bucket.
     Represents an object stored within a bucket.
@@ -1372,7 +1404,7 @@ class BucketObject(object):
         pass
         pass
 
 
 
 
-class Bucket(PageableObjectMixin):
+class Bucket(PageableObjectMixin, CloudResource):
 
 
     __metaclass__ = ABCMeta
     __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
 from cloudbridge.cloud.interfaces.resources import PageableObjectMixin
 
 
 
 
-class ProviderService(object):
+class CloudService(object):
 
 
     """
     """
     Base interface for any service supported by a provider. This interface
     Base interface for any service supported by a provider. This interface
@@ -25,7 +25,7 @@ class ProviderService(object):
         pass
         pass
 
 
 
 
-class ComputeService(ProviderService):
+class ComputeService(CloudService):
     """
     """
     The compute service interface is a collection of services that provides
     The compute service interface is a collection of services that provides
     access to the underlying compute related services in a provider. For
     access to the underlying compute related services in a provider. For
@@ -124,7 +124,7 @@ class ComputeService(ProviderService):
         pass
         pass
 
 
 
 
-class InstanceService(PageableObjectMixin, ProviderService):
+class InstanceService(PageableObjectMixin, CloudService):
     """
     """
     Provides access to instances in a provider, including creating,
     Provides access to instances in a provider, including creating,
     listing and deleting instances.
     listing and deleting instances.
@@ -258,7 +258,7 @@ class InstanceService(PageableObjectMixin, ProviderService):
         pass
         pass
 
 
 
 
-class VolumeService(PageableObjectMixin, ProviderService):
+class VolumeService(PageableObjectMixin, CloudService):
 
 
     """
     """
     Base interface for a Volume Service
     Base interface for a Volume Service
@@ -321,7 +321,7 @@ class VolumeService(PageableObjectMixin, ProviderService):
         pass
         pass
 
 
 
 
-class SnapshotService(PageableObjectMixin, ProviderService):
+class SnapshotService(PageableObjectMixin, CloudService):
 
 
     """
     """
     Base interface for a Snapshot Service
     Base interface for a Snapshot Service
@@ -381,7 +381,7 @@ class SnapshotService(PageableObjectMixin, ProviderService):
         pass
         pass
 
 
 
 
-class BlockStoreService(ProviderService):
+class BlockStoreService(CloudService):
 
 
     """
     """
     The Block Store Service interface provides access to block device services,
     The Block Store Service interface provides access to block device services,
@@ -434,7 +434,7 @@ class BlockStoreService(ProviderService):
         pass
         pass
 
 
 
 
-class ImageService(PageableObjectMixin, ProviderService):
+class ImageService(PageableObjectMixin, CloudService):
 
 
     """
     """
     Base interface for an Image Service
     Base interface for an Image Service
@@ -473,7 +473,7 @@ class ImageService(PageableObjectMixin, ProviderService):
         pass
         pass
 
 
 
 
-class ObjectStoreService(PageableObjectMixin, ProviderService):
+class ObjectStoreService(PageableObjectMixin, CloudService):
 
 
     """
     """
     The Object Storage Service interface provides access to the underlying
     The Object Storage Service interface provides access to the underlying
@@ -563,7 +563,7 @@ class ObjectStoreService(PageableObjectMixin, ProviderService):
         pass
         pass
 
 
 
 
-class SecurityService(ProviderService):
+class SecurityService(CloudService):
 
 
     """
     """
     The security service interface can be used to access security related
     The security service interface can be used to access security related
@@ -616,7 +616,7 @@ class SecurityService(ProviderService):
         pass
         pass
 
 
 
 
-class KeyPairService(PageableObjectMixin, ProviderService):
+class KeyPairService(PageableObjectMixin, CloudService):
 
 
     """
     """
     Base interface for key pairs.
     Base interface for key pairs.
@@ -691,7 +691,7 @@ class KeyPairService(PageableObjectMixin, ProviderService):
         pass
         pass
 
 
 
 
-class SecurityGroupService(PageableObjectMixin, ProviderService):
+class SecurityGroupService(PageableObjectMixin, CloudService):
 
 
     """
     """
     Base interface for security groups.
     Base interface for security groups.
@@ -773,7 +773,7 @@ class SecurityGroupService(PageableObjectMixin, ProviderService):
         pass
         pass
 
 
 
 
-class InstanceTypesService(PageableObjectMixin, ProviderService):
+class InstanceTypesService(PageableObjectMixin, CloudService):
     __metaclass__ = ABCMeta
     __metaclass__ = ABCMeta
 
 
     @abstractmethod
     @abstractmethod
@@ -797,7 +797,7 @@ class InstanceTypesService(PageableObjectMixin, ProviderService):
         pass
         pass
 
 
 
 
-class RegionService(PageableObjectMixin, ProviderService):
+class RegionService(PageableObjectMixin, CloudService):
 
 
     """
     """
     Base interface for a Region service
     Base interface for a Region service