Skip to content

Commit

Permalink
Resolved route delete issue
Browse files Browse the repository at this point in the history
  • Loading branch information
snehala27 committed Dec 27, 2021
1 parent 39d480a commit 56fdf9d
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 8 deletions.
34 changes: 32 additions & 2 deletions cloud/services/compute/networks/reconcile.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ package networks

import (
"context"
"strings"

"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
"google.golang.org/api/compute/v1"

Expand All @@ -28,6 +30,10 @@ import (
"sigs.k8s.io/controller-runtime/pkg/log"
)

const (
k8sNodeRouteTag = "k8s-node-route"
)

// Reconcile reconcile cluster network components.
func (s *Service) Reconcile(ctx context.Context) error {
log := log.FromContext(ctx)
Expand Down Expand Up @@ -93,13 +99,37 @@ func (s *Service) Delete(ctx context.Context) error {
// Custom mode detected
for _, subnet := range s.scope.SubnetworkSpec() {
subnetKey := meta.RegionalKey(subnet.Name, subnet.Region)
if err = s.subnetworks.Delete(ctx, subnetKey); err != nil {
log.Error(err, "Error deleting a subnetwork", "name", subnet.Name, "region",subnet.Region)
subnetwork, err := s.subnetworks.Get(ctx, subnetKey)
if err != nil && !gcperrors.IsNotFound(err) {
return err
}
if subnetwork != nil {
if err = s.subnetworks.Delete(ctx, subnetKey); err != nil {
log.Error(err, "Error deleting a subnetwork", "name", subnet.Name, "region", subnet.Region)
return err
}
}
}
}

// Delete routes associated with network
fl := filter.Regexp("description", k8sNodeRouteTag)
routeList, err := s.routes.List(ctx, fl)
if err != nil {
log.Error(err, "failed to list routes for the cluster")
return err
}

for _, route := range routeList {
if strings.HasSuffix(route.Network, s.scope.NetworkName()) {
log.V(2).Info("Deleting route ", "route:", route.Name)
err := s.routes.Delete(ctx, meta.GlobalKey(route.Name))
if err != nil {
log.Error(err, "Error deleting a route", "name", route.Name)
return err
}
}
}

if err := s.networks.Delete(ctx, networkKey); err != nil {
log.Error(err, "Error deleting a network", "name", s.scope.NetworkName())
Expand Down
22 changes: 16 additions & 6 deletions cloud/services/compute/networks/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package networks
import (
"context"

"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/filter"
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
"google.golang.org/api/compute/v1"

Expand All @@ -43,6 +44,13 @@ type routersInterface interface {
Delete(ctx context.Context, key *meta.Key) error
}

type routesInterface interface {
Get(ctx context.Context, key *meta.Key) (*compute.Route, error)
Insert(ctx context.Context, key *meta.Key, obj *compute.Route) error
Delete(ctx context.Context, key *meta.Key) error
List(ctx context.Context, fl *filter.F) ([]*compute.Route, error)
}

// Scope is an interfaces that hold used methods.
type Scope interface {
cloud.Cluster
Expand All @@ -53,20 +61,22 @@ type Scope interface {

// Service implements networks reconciler.
type Service struct {
scope Scope
networks networksInterface
scope Scope
networks networksInterface
subnetworks subnetworksInterface
routers routersInterface
routers routersInterface
routes routesInterface
}

var _ cloud.Reconciler = &Service{}

// New returns Service from given scope.
func New(scope Scope) *Service {
return &Service{
scope: scope,
networks: scope.Cloud().Networks(),
routers: scope.Cloud().Routers(),
scope: scope,
networks: scope.Cloud().Networks(),
routers: scope.Cloud().Routers(),
routes: scope.Cloud().Routes(),
subnetworks: scope.Cloud().Subnetworks(),
}
}

0 comments on commit 56fdf9d

Please sign in to comment.