fix bugs
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 1 Jul 2013 14:33:29 +0000 (10:33 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 1 Jul 2013 14:33:29 +0000 (10:33 -0400)
planetstack/openstack/driver.py
planetstack/openstack/observer.py

index 14eea41..c01fede 100644 (file)
@@ -264,10 +264,11 @@ class OpenStackDriver:
                     gw_port = port
                     router_id = gw_port['device_id']
                     router = self.shell.quantum.show_router(router_id)['router']
-                    ext_net = router['external_gateway_info']['network_id']
-                    for port in ports:
-                        if port['device_id'] == router_id and port['network_id'] == ext_net:
-                            ip_address = port['fixed_ips'][0]['ip_address']
+                    if router:
+                        ext_net = router['external_gateway_info']['network_id']
+                        for port in ports:
+                            if port['device_id'] == router_id and port['network_id'] == ext_net:
+                                ip_address = port['fixed_ips'][0]['ip_address']
 
         if ip_address:
             # check if external route already exists
@@ -278,7 +279,8 @@ class OpenStackDriver:
                         route_exists = True
             if not route_exists:
                 cmd = "route add -net %s dev br-ex gw %s" % (subnet['cidr'], ip_address)
-                commands.getstatusoutput(cmd)
+                s, o = commands.getstatusoutput(cmd)
+                #print cmd, "\n", s, o
 
         return 1
 
index 8da0999..08cbf46 100644 (file)
@@ -27,7 +27,8 @@ class OpenStackObserver:
                 self.sync_user_tenant_roles()
                 self.sync_slivers()
                 self.sync_sliver_ips()
-                time.sleep(7)
+                self.sync_external_routes()
+                time.sleep(10)
             except:
                 traceback.print_exc() 
 
@@ -277,7 +278,10 @@ class OpenStackObserver:
 
     def sync_external_routes(self):
         routes = self.manager.driver.get_external_routes() 
-        subnets = self.manager.driver.shell.quantum.list_subnets()
+        subnets = self.manager.driver.shell.quantum.list_subnets()['subnets']
         for subnet in subnets:
-            self.manager.driver.add_external_route(subnet, routes)         
+            try: 
+                self.manager.driver.add_external_route(subnet, routes)         
+            except: 
+                logger.log_exc("failed to add external route for subnet %s" % subnet)