Просмотр исходного кода

Added missing find methods for more consistent interface

Nuwan Goonasekera 8 лет назад
Родитель
Сommit
2163a3ed33

+ 10 - 0
cloudbridge/cloud/interfaces/resources.py

@@ -2175,6 +2175,16 @@ class Bucket(PageableObjectMixin, CloudResource):
         """
         pass
 
+    @abstractmethod
+    def find(self, name):
+        """
+        Searches for an instance by a given name
+
+        :rtype: List of ``object`` of :class:`.BucketObject`
+        :return: A list of BucketObjects matching the supplied attributes.
+        """
+        pass
+
     @abstractmethod
     def delete(self, delete_contents=False):
         """

+ 6 - 0
cloudbridge/cloud/providers/aws/resources.py

@@ -903,6 +903,12 @@ class AWSBucket(BaseBucket):
         return ClientPagedResultList(self._provider, objects,
                                      limit=limit, marker=marker)
 
+    def find(self, name, limit=None, marker=None):
+        objects = [obj for obj in self if obj.name == name]
+
+        return ClientPagedResultList(self._provider, objects,
+                                     limit=limit, marker=marker)
+
     def delete(self, delete_contents=False):
         """
         Delete this bucket.

+ 8 - 0
cloudbridge/cloud/providers/aws/services.py

@@ -718,6 +718,14 @@ class AWSNetworkService(BaseNetworkService):
         return ClientPagedResultList(self.provider, networks,
                                      limit=limit, marker=marker)
 
+    def find(self, name, limit=None, marker=None):
+        filtr = {'tag:Name': name}
+        networks = [AWSNetwork(self.provider, network)
+                    for network in self.provider.vpc_conn.get_all_vpcs(
+                        filters=filtr)]
+        return ClientPagedResultList(self.provider, networks,
+                                     limit=limit, marker=marker)
+
     def create(self, name=None):
         # AWS requires CIDR block to be specified when creating a network
         # so set a default one and use the largest allowed netmask.

+ 6 - 0
cloudbridge/cloud/providers/openstack/resources.py

@@ -24,6 +24,7 @@ from cloudbridge.cloud.base.resources import BaseSecurityGroupRule
 from cloudbridge.cloud.base.resources import BaseSnapshot
 from cloudbridge.cloud.base.resources import BaseSubnet
 from cloudbridge.cloud.base.resources import BaseVolume
+from cloudbridge.cloud.base.resources import ClientPagedResultList
 from cloudbridge.cloud.interfaces.resources import InstanceState
 from cloudbridge.cloud.interfaces.resources import MachineImageState
 from cloudbridge.cloud.interfaces.resources import NetworkState
@@ -1211,6 +1212,11 @@ class OpenStackBucket(BaseBucket):
             cb_objects,
             limit)
 
+    def find(self, name, limit=None, marker=None):
+        objects = [obj for obj in self if obj.name == name]
+        return ClientPagedResultList(self._provider, objects,
+                                     limit=limit, marker=marker)
+
     def delete(self, delete_contents=False):
         """
         Delete this bucket.

+ 9 - 0
cloudbridge/cloud/providers/openstack/services.py

@@ -713,6 +713,15 @@ class OpenStackNetworkService(BaseNetworkService):
         return ClientPagedResultList(self.provider, networks,
                                      limit=limit, marker=marker)
 
+    def find(self, name, limit=None, marker=None):
+        search_opts = {'name': name}
+        networks = [OpenStackNetwork(self.provider, network)
+                    for network in self.provider.neutron.list_networks(
+                        search_opts=search_opts)
+                    .get('networks', [])]
+        return ClientPagedResultList(self.provider, networks,
+                                     limit=limit, marker=marker)
+
     def create(self, name=''):
         net_info = {'name': name}
         network = self.provider.neutron.create_network({'network': net_info})