From 65d4147139a4c1a485f2fdf92695675d22aca001 Mon Sep 17 00:00:00 2001 From: Fabian Ruff Date: Wed, 18 Apr 2018 13:15:41 +0200 Subject: [PATCH] ensure we delete orphaned routes with matching next-hops only There might be a valid route with the same DestinationCIDR pointing to a running node. --- .../providers/openstack/openstack_routes.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/cloudprovider/providers/openstack/openstack_routes.go b/pkg/cloudprovider/providers/openstack/openstack_routes.go index 4504523ed7..3f41c7339d 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_routes.go +++ b/pkg/cloudprovider/providers/openstack/openstack_routes.go @@ -83,9 +83,12 @@ func (r *Routes) ListRoutes(ctx context.Context, clusterName string) ([]*cloudpr var routes []*cloudprovider.Route for _, item := range router.Routes { nodeName, foundNode := nodeNamesByAddr[item.NextHop] + if !foundNode { + nodeName = types.NodeName(item.NextHop) + } route := cloudprovider.Route{ Name: item.DestinationCIDR, - TargetNode: nodeName, //empty if NextHop is unknown + TargetNode: nodeName, //contains the nexthop address if node was not found Blackhole: !foundNode, DestinationCIDR: item.DestinationCIDR, } @@ -228,7 +231,7 @@ func (r *Routes) DeleteRoute(ctx context.Context, clusterName string, route *clo var addr string - // Blackhole routes are orphaned and have no target in OpenStack + // Blackhole routes are orphaned and have no counterpart in OpenStack if !route.Blackhole { var err error addr, err = getAddressByName(r.compute, route.TargetNode, isCIDRv6) @@ -245,7 +248,7 @@ func (r *Routes) DeleteRoute(ctx context.Context, clusterName string, route *clo routes := router.Routes index := -1 for i, item := range routes { - if item.DestinationCIDR == route.DestinationCIDR && (route.Blackhole || item.NextHop == addr) { + if item.DestinationCIDR == route.DestinationCIDR && (item.NextHop == addr || route.Blackhole && item.NextHop == string(route.TargetNode)) { index = i break }