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

Fixed router issues and fixed tests

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

+ 10 - 0
cloudbridge/cloud/base/services.py

@@ -1,6 +1,8 @@
 """
 Base implementation for services available through a provider
 """
+from cloudbridge.cloud.interfaces.resources import Router
+
 from cloudbridge.cloud.interfaces.services import BlockStoreService
 from cloudbridge.cloud.interfaces.services import CloudService
 from cloudbridge.cloud.interfaces.services import ComputeService
@@ -186,6 +188,14 @@ class BaseRouterService(
     def __init__(self, provider):
         super(BaseRouterService, self).__init__(provider)
 
+    def delete(self, router):
+        if isinstance(router, Router):
+            router.delete()
+        else:
+            router = self.get(router)
+            if router:
+                router.delete()
+
 
 class BaseGatewayService(
         GatewayService, BaseCloudService):

+ 5 - 4
cloudbridge/cloud/providers/aws/resources.py

@@ -1183,18 +1183,19 @@ class AWSRouter(BaseRouter):
         return self._route_table.vpc_id
 
     def delete(self):
-        return self._provider.networking.routers.delete(self)
+        self._provider.vpc_conn.delete_route_table(self.id)
 
     def attach_subnet(self, subnet):
         subnet_id = subnet.id if isinstance(subnet, AWSSubnet) else subnet
         self._provider.vpc_conn.associate_route_table(self.id, subnet_id)
+        self.refresh()
 
     def detach_subnet(self, subnet):
         subnet_id = subnet.id if isinstance(subnet, AWSSubnet) else subnet
-        association_ids = [a for a in self._route_table.associations
+        association_ids = [a.id for a in self._route_table.associations
                            if a.subnet_id == subnet_id]
-        for a in association_ids:
-            self._provider.vpc_conn.disassociate_route_table(a)
+        for a_id in association_ids:
+            self._provider.vpc_conn.disassociate_route_table(a_id)
 
     def attach_gateway(self, gateway):
         return self._provider.vpc_conn.attach_internet_gateway(

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

@@ -949,10 +949,6 @@ class AWSRouterService(BaseRouterService):
             cb_router.name = name
         return cb_router
 
-    def delete(self, router):
-        router_id = router.id if isinstance(router, AWSRouter) else router
-        return self.provider.vpc_conn.delete_route_table(router_id)
-
 
 class AWSGatewayService(BaseGatewayService):
 

+ 1 - 8
cloudbridge/cloud/providers/openstack/resources.py

@@ -899,9 +899,6 @@ class OpenStackRouter(BaseRouter):
 
     def delete(self):
         self._provider.neutron.delete_router(self.id)
-        # Adhere to the interface docs
-        if self.id not in str(self._provider.neutron.list_routers()):
-            return True
 
     def attach_subnet(self, subnet):
         router_interface = {'subnet_id': subnet.id}
@@ -921,15 +918,11 @@ class OpenStackRouter(BaseRouter):
 
     def attach_gateway(self, gateway):
         self._router = self._provider.neutron.add_gateway_router(
-            self.id, {'network_id': gateway.id}).get('router',
-                                                     self._router)
+            self.id, {'network_id': gateway.id})
 
     def detach_gateway(self, gateway):
         self._router = self._provider.neutron.remove_gateway_router(
             self.id).get('router', self._router)
-        if not self.network_id:
-            return True
-        return False
 
 
 class OpenStackInternetGateway(BaseInternetGateway):

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

@@ -899,11 +899,6 @@ class OpenStackRouterService(BaseRouterService):
             {'router': {'name': name}})
         return OpenStackRouter(self.provider, router.get('router'))
 
-    def delete(self, router):
-        router_id = (router.id if isinstance(router, OpenStackRouter)
-                     else router)
-        self.provider.neutron.delete_router(router_id)
-
 
 class OpenStackGatewayService(BaseGatewayService):
 

+ 4 - 3
test/test_compute_service.py

@@ -318,13 +318,14 @@ class CloudComputeServiceTestCase(ProviderTestBase):
                 router.attach_subnet(subnet)
                 gateway = (self.provider.networking.gateways
                            .get_or_create_inet_gateway(name))
-                router.attach_gateway(gateway)
 
                 def cleanup_router():
-                    router.detach_subnet(subnet)
-                    gateway.delete()
+                    with helpers.cleanup_action(lambda: gateway.delete()):
+                        router.detach_subnet(subnet)
+                        router.detach_gateway(gateway)
 
                 with helpers.cleanup_action(lambda: cleanup_router()):
+                    router.attach_gateway(gateway)
                     # check whether adding an elastic ip works
                     fip = (self.provider.networking.networks
                            .create_floating_ip())

+ 9 - 8
test/test_network_service.py

@@ -112,10 +112,10 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
         def _cleanup(net, subnet, router, gateway):
             with helpers.cleanup_action(lambda: net.delete()):
                 with helpers.cleanup_action(lambda: subnet.delete()):
-                    with helpers.cleanup_action(lambda: router.delete()):
-                        router.detach_subnet(net)
-                        with helpers.cleanup_action(lambda: gateway.delete()):
-                            pass
+                    with helpers.cleanup_action(lambda: gateway.delete()):
+                        with helpers.cleanup_action(lambda: router.delete()):
+                            router.detach_subnet(subnet)
+                            router.detach_gateway(gateway)
 
         name = 'cb_crudrouter-{0}'.format(helpers.get_uuid())
         # Declare these variables and late binding will allow
@@ -123,7 +123,8 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
         net = None
         sn = None
         router = None
-        with helpers.cleanup_action(lambda: _cleanup(net, sn, router)):
+        gteway = None
+        with helpers.cleanup_action(lambda: _cleanup(net, sn, router, gteway)):
             net = self.provider.networking.networks.create(name=name)
             router = self.provider.networking.routers.create(network=net,
                                                              name=name)
@@ -146,9 +147,9 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
 #                     router.id, router.network_id))
 
             router.attach_subnet(sn)
-            gateway = (self.provider.networking.gateways
-                       .get_or_create_inet_gateway(name))
-            router.attach_gateway(gateway)
+            gteway = (self.provider.networking.gateways
+                      .get_or_create_inet_gateway(name))
+            router.attach_gateway(gteway)
             # TODO: add a check for routes after that's been implemented
 
         sit.check_delete(self, self.provider.networking.routers, router)