소스 검색

Fixed region handling and non existent instance handling

Nuwan Goonasekera 8 년 전
부모
커밋
a2724e53ff
4개의 변경된 파일12개의 추가작업 그리고 12개의 파일을 삭제
  1. 2 3
      cloudbridge/cloud/base/resources.py
  2. 7 5
      cloudbridge/cloud/providers/aws/services.py
  3. 3 3
      test/test_region_service.py
  4. 0 1
      test/test_security_service.py

+ 2 - 3
cloudbridge/cloud/base/resources.py

@@ -3,7 +3,6 @@ Base implementation for data objects exposed through a provider or service
 """
 import inspect
 import itertools
-import json
 import logging
 import os
 import shutil
@@ -58,7 +57,7 @@ class BaseCloudResource(CloudResource):
         # Get all attributes but filter methods and private/magic ones
         attr = inspect.getmembers(self, lambda a: not(inspect.isroutine(a)))
         js = {k: v for(k, v) in attr if not k.startswith('_')}
-        return json.dumps(js, sort_keys=True)
+        return js
 
 
 class BaseObjectLifeCycleMixin(ObjectLifeCycleMixin):
@@ -585,7 +584,7 @@ class BaseRegion(Region, BaseCloudResource):
         attr = inspect.getmembers(self, lambda a: not(inspect.isroutine(a)))
         js = {k: v for(k, v) in attr if not k.startswith('_')}
         js['zones'] = [z.name for z in self.zones]
-        return json.dumps(js, sort_keys=True)
+        return js
 
 
 class BaseBucketObject(BucketObject, BaseCloudResource):

+ 7 - 5
cloudbridge/cloud/providers/aws/services.py

@@ -604,8 +604,11 @@ class AWSInstanceService(BaseInstanceService):
         Returns an instance given its id. Returns None
         if the object does not exist.
         """
-        reservation = self.provider.ec2_conn.get_all_reservations(
-            instance_ids=[instance_id])
+        try:
+            reservation = self.provider.ec2_conn.get_all_reservations(
+                instance_ids=[instance_id])
+        except EC2ResponseError:
+            return None
         if reservation:
             return AWSInstance(self.provider, reservation[0].instances[0])
         else:
@@ -682,10 +685,9 @@ class AWSRegionService(BaseRegionService):
         super(AWSRegionService, self).__init__(provider)
 
     def get(self, region_id):
-        region = self.provider.ec2_conn.get_all_regions(
-            region_names=[region_id])
+        region = [r for r in self if r.id == region_id]
         if region:
-            return AWSRegion(self.provider, region[0])
+            return region[0]
         else:
             return None
 

+ 3 - 3
test/test_region_service.py

@@ -15,9 +15,9 @@ class CloudRegionServiceTestCase(ProviderTestBase):
         Test whether the region listing methods work,
         and whether zones are returned appropriately.
         """
-        regions = self.provider.compute.regions.list()
+        regions = list(self.provider.compute.regions)
         sit.check_standard_behaviour(
-            self, self.provider.compute.regions, regions[0])
+            self, self.provider.compute.regions, regions[-1])
 
         for region in regions:
             self.assertIsInstance(
@@ -44,7 +44,7 @@ class CloudRegionServiceTestCase(ProviderTestBase):
         """
         current_region = self.provider.compute.regions.current
         self.assertIsInstance(current_region, Region)
-        self.assertTrue(current_region in self.provider.compute.regions.list())
+        self.assertTrue(current_region in self.provider.compute.regions)
 
     @helpers.skipIfNoService(['compute.regions'])
     def test_zones(self):

+ 0 - 1
test/test_security_service.py

@@ -1,5 +1,4 @@
 """Test cloudbridge.security modules."""
-import json
 import unittest
 import uuid