Skip to content

Commit

Permalink
refactor remove_private_DNS_zone: split in narrow functions and remov…
Browse files Browse the repository at this point in the history
…e duplication
  • Loading branch information
Aldo Fuster Turpin committed Jul 18, 2024
1 parent 28ced68 commit 18327fa
Show file tree
Hide file tree
Showing 10 changed files with 1,221 additions and 486 deletions.
24 changes: 2 additions & 22 deletions pkg/cluster/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/Azure/ARO-RP/pkg/util/azureclient"
"github.com/Azure/ARO-RP/pkg/util/azureerrors"
"github.com/Azure/ARO-RP/pkg/util/dns"
utilnet "github.com/Azure/ARO-RP/pkg/util/net"
"github.com/Azure/ARO-RP/pkg/util/oidcbuilder"
"github.com/Azure/ARO-RP/pkg/util/rbac"
"github.com/Azure/ARO-RP/pkg/util/stringutils"
Expand Down Expand Up @@ -63,27 +64,6 @@ func (m *manager) deleteNic(ctx context.Context, nicName string) error {
return m.interfaces.DeleteAndWait(ctx, resourceGroup, *nic.Name)
}

func (m *manager) deletePrivateDNSVirtualNetworkLinks(ctx context.Context, resourceID string) error {
r, err := azure.ParseResourceID(resourceID)
if err != nil {
return err
}

virtualNetworkLinks, err := m.virtualNetworkLinks.List(ctx, r.ResourceGroup, r.ResourceName, nil)
if err != nil {
return err
}

for _, virtualNetworkLink := range virtualNetworkLinks {
err = m.virtualNetworkLinks.DeleteAndWait(ctx, r.ResourceGroup, r.ResourceName, *virtualNetworkLink.Name, "")
if err != nil {
return err
}
}

return nil
}

func (m *manager) disconnectSecurityGroup(ctx context.Context, resourceID string) error {
r, err := azure.ParseResourceID(resourceID)
if err != nil {
Expand Down Expand Up @@ -224,7 +204,7 @@ func (m *manager) deleteResources(ctx context.Context) error {

case "microsoft.network/privatednszones":
m.log.Printf("deleting private DNS nested resources of %s", *resource.ID)
err = m.deletePrivateDNSVirtualNetworkLinks(ctx, *resource.ID)
err = utilnet.DeletePrivateDNSVNetLinks(ctx, m.virtualNetworkLinks, *resource.ID)
if err != nil {
return err
}
Expand Down
152 changes: 13 additions & 139 deletions pkg/cluster/removeprivatednszone.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,147 +5,21 @@ package cluster

import (
"context"
"strings"

"github.com/Azure/go-autorest/autorest/azure"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/util/retry"

"github.com/Azure/ARO-RP/pkg/util/ready"
"github.com/Azure/ARO-RP/pkg/util/stringutils"
"github.com/Azure/ARO-RP/pkg/util/version"
utilnet "github.com/Azure/ARO-RP/pkg/util/net"
)

func (m *manager) removePrivateDNSZone(ctx context.Context) error {
resourceGroup := stringutils.LastTokenByte(m.doc.OpenShiftCluster.Properties.ClusterProfile.ResourceGroupID, '/')

zones, err := m.privateZones.ListByResourceGroup(ctx, resourceGroup, nil)
if err != nil {
m.log.Print(err)
return nil
}

if len(zones) == 0 {
// fix up any clusters that we already upgraded
err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
dns, err := m.configcli.ConfigV1().DNSes().Get(ctx, "cluster", metav1.GetOptions{})
if err != nil {
return err
}

if dns.Spec.PrivateZone == nil ||
!strings.HasPrefix(strings.ToLower(dns.Spec.PrivateZone.ID), strings.ToLower(m.doc.OpenShiftCluster.Properties.ClusterProfile.ResourceGroupID)) {
return nil
}

dns.Spec.PrivateZone = nil

_, err = m.configcli.ConfigV1().DNSes().Update(ctx, dns, metav1.UpdateOptions{})
return err
})
if err != nil {
m.log.Print(err)
}

return nil
}

mcps, err := m.mcocli.MachineconfigurationV1().MachineConfigPools().List(ctx, metav1.ListOptions{})
if err != nil {
m.log.Print(err)
return nil
}

var machineCount int
for _, mcp := range mcps.Items {
var found bool
for _, source := range mcp.Status.Configuration.Source {
if source.Name == "99-"+mcp.Name+"-aro-dns" {
found = true
break
}
}

if !found {
m.log.Printf("ARO DNS config not found in MCP %s", mcp.Name)
return nil
}

if !ready.MachineConfigPoolIsReady(&mcp) {
m.log.Printf("MCP %s not ready", mcp.Name)
return nil
}

machineCount += int(mcp.Status.MachineCount)
}

nodes, err := m.kubernetescli.CoreV1().Nodes().List(ctx, metav1.ListOptions{})
if err != nil {
m.log.Print(err)
return nil
}

if len(nodes.Items) != machineCount {
m.log.Printf("cluster has %d nodes but %d under MCPs, not removing private DNS zone", len(nodes.Items), machineCount)
return nil
}

cv, err := m.configcli.ConfigV1().ClusterVersions().Get(ctx, "version", metav1.GetOptions{})
if err != nil {
return err
}
v, err := version.GetClusterVersion(cv)
if err != nil {
m.log.Print(err)
return nil
}

if v.Lt(version.NewVersion(4, 4)) {
// 4.3 uses SRV records for etcd
m.log.Printf("cluster version < 4.4, not removing private DNS zone")
return nil
}

err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
dns, err := m.configcli.ConfigV1().DNSes().Get(ctx, "cluster", metav1.GetOptions{})
if err != nil {
return err
}

if dns.Spec.PrivateZone == nil ||
!strings.HasPrefix(strings.ToLower(dns.Spec.PrivateZone.ID), strings.ToLower(m.doc.OpenShiftCluster.Properties.ClusterProfile.ResourceGroupID)) {
return nil
}

dns.Spec.PrivateZone = nil

_, err = m.configcli.ConfigV1().DNSes().Update(ctx, dns, metav1.UpdateOptions{})
return err
})
if err != nil {
m.log.Print(err)
return nil
}

for _, zone := range zones {
err = m.deletePrivateDNSVirtualNetworkLinks(ctx, *zone.ID)
if err != nil {
m.log.Print(err)
return nil
}

r, err := azure.ParseResourceID(*zone.ID)
if err != nil {
m.log.Print(err)
return nil
}

err = m.privateZones.DeleteAndWait(ctx, resourceGroup, r.ResourceName, "")
if err != nil {
m.log.Print(err)
return nil
}
}

return nil
resourceGroupID := m.doc.OpenShiftCluster.Properties.ClusterProfile.ResourceGroupID
config := utilnet.PrivateZoneRemovalConfig{
Log: m.log,
PrivateZonesClient: m.privateZones,
Configcli: m.configcli,
Mcocli: m.mcocli,
Kubernetescli: m.kubernetescli,
VNetLinksClient: m.virtualNetworkLinks,
ResourceGroupID: resourceGroupID,
}

return utilnet.RemovePrivateDNSZone(ctx, config)
}
Loading

0 comments on commit 18327fa

Please sign in to comment.