Skip to content

[release-4.19] OCPBUGS-58073: Refactor removing loadbalancer in OpenStack. #9808

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: release-4.19
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 21 additions & 51 deletions pkg/destroy/openstack/openstack.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (
"github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servergroups"
"github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers"
"github.com/gophercloud/gophercloud/v2/openstack/image/v2/images"
"github.com/gophercloud/gophercloud/v2/openstack/loadbalancer/v2/apiversions"
"github.com/gophercloud/gophercloud/v2/openstack/loadbalancer/v2/loadbalancers"
"github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/attributestags"
"github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips"
Expand All @@ -42,10 +41,9 @@ import (
)

const (
cinderCSIClusterIDKey = "cinder.csi.openstack.org/cluster"
manilaCSIClusterIDKey = "manila.csi.openstack.org/cluster"
minOctaviaVersionWithTagSupport = "v2.5"
cloudProviderSGNamePattern = `^lb-sg-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}`
cinderCSIClusterIDKey = "cinder.csi.openstack.org/cluster"
manilaCSIClusterIDKey = "manila.csi.openstack.org/cluster"
cloudProviderSGNamePattern = `^lb-sg-[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}`
)

// Filter holds the key/value pairs for the tags we will be matching
Expand Down Expand Up @@ -1301,68 +1299,40 @@ func deleteLoadBalancers(ctx context.Context, opts *clientconfig.ClientOpts, fil
return false, nil
}

newallPages, err := apiversions.List(conn).AllPages(ctx)
if err != nil {
logger.Errorf("Unable to list api versions: %v", err)
return false, nil
}

allAPIVersions, err := apiversions.ExtractAPIVersions(newallPages)
if err != nil {
logger.Errorf("Unable to extract api versions: %v", err)
return false, nil
}

var octaviaTagSupport bool
octaviaTagSupport = false
for _, apiVersion := range allAPIVersions {
if apiVersion.ID >= minOctaviaVersionWithTagSupport {
octaviaTagSupport = true
}
}

tags := filterTags(filter)
var allLoadBalancers []loadbalancers.LoadBalancer
if octaviaTagSupport {
listOpts := loadbalancers.ListOpts{
TagsAny: tags,
}
allPages, err := loadbalancers.List(conn, listOpts).AllPages(ctx)
if err != nil {
logger.Error(err)
return false, nil
}

allLoadBalancers, err = loadbalancers.ExtractLoadBalancers(allPages)
if err != nil {
logger.Error(err)
return false, nil
}
}

listOpts := loadbalancers.ListOpts{
Description: strings.Join(tags, ","),
}
// Don't use tags for checking loadbalancers, as tags are useless here -
// the only one which was created is:
// kube_service_CLUSTERID_NAMESPACE_SERVICENAME
// which basically is the same as the loadbalancer name. More reliable
// approach would be to check either description or name of the OpenStack
// LB resource and check whether it contain clusterID string.
clusterID := filter["openshiftClusterID"]
var allLoadBalancersToRemove []loadbalancers.LoadBalancer
listOpts := loadbalancers.ListOpts{}

allPages, err := loadbalancers.List(conn, listOpts).AllPages(ctx)
if err != nil {
logger.Error(err)
return false, nil
}

allLoadBalancersWithTaggedDescription, err := loadbalancers.ExtractLoadBalancers(allPages)
allLoadBalancers, err := loadbalancers.ExtractLoadBalancers(allPages)
if err != nil {
logger.Error(err)
return false, nil
}

allLoadBalancers = append(allLoadBalancers, allLoadBalancersWithTaggedDescription...)
for _, lb := range allLoadBalancers {
if strings.Contains(lb.Description, clusterID) {
allLoadBalancersToRemove = append(allLoadBalancersToRemove, lb)
}
}

deleteOpts := loadbalancers.DeleteOpts{
Cascade: true,
}
numberToDelete := len(allLoadBalancers)
numberToDelete := len(allLoadBalancersToRemove)
numberDeleted := 0
for _, loadbalancer := range allLoadBalancers {
for _, loadbalancer := range allLoadBalancersToRemove {
logger.Debugf("Deleting LoadBalancer %q", loadbalancer.ID)
err = loadbalancers.Delete(ctx, conn, loadbalancer.ID, deleteOpts).ExtractErr()
if err != nil {
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

1 change: 0 additions & 1 deletion vendor/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -946,7 +946,6 @@ github.com/gophercloud/gophercloud/v2/openstack/identity/v3/oauth1
github.com/gophercloud/gophercloud/v2/openstack/identity/v3/tokens
github.com/gophercloud/gophercloud/v2/openstack/image/v2/imagedata
github.com/gophercloud/gophercloud/v2/openstack/image/v2/images
github.com/gophercloud/gophercloud/v2/openstack/loadbalancer/v2/apiversions
github.com/gophercloud/gophercloud/v2/openstack/loadbalancer/v2/l7policies
github.com/gophercloud/gophercloud/v2/openstack/loadbalancer/v2/listeners
github.com/gophercloud/gophercloud/v2/openstack/loadbalancer/v2/loadbalancers
Expand Down