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
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
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()
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)