Skip to content

Commit 494ff14

Browse files
Move overlay cleanup to code (#1696)
* cleanup using code * update render tests
1 parent 9d3a274 commit 494ff14

File tree

10 files changed

+254
-70
lines changed

10 files changed

+254
-70
lines changed

cmd/appgw-ingress/main.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ var (
5656
resyncPeriod = flags.Duration("sync-period", resyncPause, "Interval at which to re-list and confirm cloud resources.")
5757
versionInfo = flags.Bool("version", false, "Print version")
5858
verbosity = flags.Int(verbosityFlag, 1, "Set logging verbosity level")
59+
cleanupOEC = flags.Bool("cleanup-oec", false, "Cleanup OverlayExtensionConfig resources")
5960
)
6061

6162
var allowedSkus = map[n.ApplicationGatewayTier]interface{}{
@@ -105,6 +106,14 @@ func main() {
105106
klog.Fatalf("Failed to create controller-runtime client: %v", err)
106107
}
107108

109+
if *cleanupOEC {
110+
if err := cni.CleanupOverlayExtensionConfigs(ctrlClient, env.AGICPodNamespace, env.AddonMode); err != nil {
111+
klog.Fatalf("Failed to cleanup OverlayExtensionConfig resources: %v", err)
112+
}
113+
klog.Info("Successfully cleaned up OverlayExtensionConfig resources")
114+
return
115+
}
116+
108117
kubeClient := kubernetes.NewForConfigOrDie(apiConfig)
109118
k8scontext.IsNetworkingV1PackageSupported = k8scontext.SupportsNetworkingPackage(kubeClient)
110119
k8scontext.IsInMultiClusterMode = env.MultiClusterMode

helm/ingress-azure/templates/cleanup-job.yaml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,16 @@ spec:
1717
restartPolicy: OnFailure
1818
containers:
1919
- name: cleanup
20-
image: "mcr.microsoft.com/oss/kubernetes/kubectl:v1.30.5"
21-
imagePullPolicy: IfNotPresent
20+
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
21+
imagePullPolicy: {{ .Values.image.pullPolicy }}
2222
env:
2323
- name: AGIC_POD_NAMESPACE
2424
valueFrom:
2525
fieldRef:
2626
fieldPath: metadata.namespace
2727
command:
28-
- "kubectl"
29-
- "delete"
30-
- "--ignore-not-found"
31-
- "--wait"
32-
- "-n"
33-
- "$(AGIC_POD_NAMESPACE)"
34-
- "overlayextensionconfigs.acn.azure.com"
35-
- "-l"
28+
- "/appgw-ingress"
29+
- "--cleanup-oec"
3630
{{- if .Values.addon }}
3731
- "app.kubernetes.io/managed-by=ingress-appgw-addon"
3832
{{- else }}

helm/ingress-azure/tests/snapshots/sample-config-addon/ingress-azure/templates/cleanup-job.yaml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,16 @@ spec:
1919
restartPolicy: OnFailure
2020
containers:
2121
- name: cleanup
22-
image: "mcr.microsoft.com/oss/kubernetes/kubectl:v1.30.5"
23-
imagePullPolicy: IfNotPresent
22+
image: mcr.microsoft.com/azure-application-gateway/kubernetes-ingress:1.6.0
23+
imagePullPolicy: Always
2424
env:
2525
- name: AGIC_POD_NAMESPACE
2626
valueFrom:
2727
fieldRef:
2828
fieldPath: metadata.namespace
2929
command:
30-
- "kubectl"
31-
- "delete"
32-
- "--ignore-not-found"
33-
- "--wait"
34-
- "-n"
35-
- "$(AGIC_POD_NAMESPACE)"
36-
- "overlayextensionconfigs.acn.azure.com"
37-
- "-l"
30+
- "/appgw-ingress"
31+
- "--cleanup-oec"
3832
- "app.kubernetes.io/managed-by=ingress-appgw-addon"
3933
securityContext:
4034
capabilities:

helm/ingress-azure/tests/snapshots/sample-config-empty/ingress-azure/templates/cleanup-job.yaml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,16 @@ spec:
1919
restartPolicy: OnFailure
2020
containers:
2121
- name: cleanup
22-
image: "mcr.microsoft.com/oss/kubernetes/kubectl:v1.30.5"
23-
imagePullPolicy: IfNotPresent
22+
image: mcr.microsoft.com/azure-application-gateway/kubernetes-ingress:1.6.0
23+
imagePullPolicy: Always
2424
env:
2525
- name: AGIC_POD_NAMESPACE
2626
valueFrom:
2727
fieldRef:
2828
fieldPath: metadata.namespace
2929
command:
30-
- "kubectl"
31-
- "delete"
32-
- "--ignore-not-found"
33-
- "--wait"
34-
- "-n"
35-
- "$(AGIC_POD_NAMESPACE)"
36-
- "overlayextensionconfigs.acn.azure.com"
37-
- "-l"
30+
- "/appgw-ingress"
31+
- "--cleanup-oec"
3832
- "app.kubernetes.io/managed-by=ingress-appgw-helm"
3933
securityContext:
4034
capabilities:

helm/ingress-azure/tests/snapshots/sample-config-existing-secret/ingress-azure/templates/cleanup-job.yaml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,16 @@ spec:
1919
restartPolicy: OnFailure
2020
containers:
2121
- name: cleanup
22-
image: "mcr.microsoft.com/oss/kubernetes/kubectl:v1.30.5"
23-
imagePullPolicy: IfNotPresent
22+
image: mcr.microsoft.com/azure-application-gateway/kubernetes-ingress:1.6.0
23+
imagePullPolicy: Always
2424
env:
2525
- name: AGIC_POD_NAMESPACE
2626
valueFrom:
2727
fieldRef:
2828
fieldPath: metadata.namespace
2929
command:
30-
- "kubectl"
31-
- "delete"
32-
- "--ignore-not-found"
33-
- "--wait"
34-
- "-n"
35-
- "$(AGIC_POD_NAMESPACE)"
36-
- "overlayextensionconfigs.acn.azure.com"
37-
- "-l"
30+
- "/appgw-ingress"
31+
- "--cleanup-oec"
3832
- "app.kubernetes.io/managed-by=ingress-appgw-helm"
3933
securityContext:
4034
capabilities:

helm/ingress-azure/tests/snapshots/sample-config-prohibited-target/ingress-azure/templates/cleanup-job.yaml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,16 @@ spec:
1919
restartPolicy: OnFailure
2020
containers:
2121
- name: cleanup
22-
image: "mcr.microsoft.com/oss/kubernetes/kubectl:v1.30.5"
23-
imagePullPolicy: IfNotPresent
22+
image: mcr.microsoft.com/azure-application-gateway/kubernetes-ingress:1.6.0
23+
imagePullPolicy: Always
2424
env:
2525
- name: AGIC_POD_NAMESPACE
2626
valueFrom:
2727
fieldRef:
2828
fieldPath: metadata.namespace
2929
command:
30-
- "kubectl"
31-
- "delete"
32-
- "--ignore-not-found"
33-
- "--wait"
34-
- "-n"
35-
- "$(AGIC_POD_NAMESPACE)"
36-
- "overlayextensionconfigs.acn.azure.com"
37-
- "-l"
30+
- "/appgw-ingress"
31+
- "--cleanup-oec"
3832
- "app.kubernetes.io/managed-by=ingress-appgw-helm"
3933
securityContext:
4034
capabilities:

helm/ingress-azure/tests/snapshots/sample-config-workload-identity/ingress-azure/templates/cleanup-job.yaml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,16 @@ spec:
1919
restartPolicy: OnFailure
2020
containers:
2121
- name: cleanup
22-
image: "mcr.microsoft.com/oss/kubernetes/kubectl:v1.30.5"
23-
imagePullPolicy: IfNotPresent
22+
image: mcr.microsoft.com/azure-application-gateway/kubernetes-ingress:1.6.0
23+
imagePullPolicy: Always
2424
env:
2525
- name: AGIC_POD_NAMESPACE
2626
valueFrom:
2727
fieldRef:
2828
fieldPath: metadata.namespace
2929
command:
30-
- "kubectl"
31-
- "delete"
32-
- "--ignore-not-found"
33-
- "--wait"
34-
- "-n"
35-
- "$(AGIC_POD_NAMESPACE)"
36-
- "overlayextensionconfigs.acn.azure.com"
37-
- "-l"
30+
- "/appgw-ingress"
31+
- "--cleanup-oec"
3832
- "app.kubernetes.io/managed-by=ingress-appgw-helm"
3933
securityContext:
4034
capabilities:

helm/ingress-azure/tests/snapshots/sample-config/ingress-azure/templates/cleanup-job.yaml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,16 @@ spec:
1919
restartPolicy: OnFailure
2020
containers:
2121
- name: cleanup
22-
image: "mcr.microsoft.com/oss/kubernetes/kubectl:v1.30.5"
23-
imagePullPolicy: IfNotPresent
22+
image: mcr.microsoft.com/azure-application-gateway/kubernetes-ingress:1.6.0
23+
imagePullPolicy: Always
2424
env:
2525
- name: AGIC_POD_NAMESPACE
2626
valueFrom:
2727
fieldRef:
2828
fieldPath: metadata.namespace
2929
command:
30-
- "kubectl"
31-
- "delete"
32-
- "--ignore-not-found"
33-
- "--wait"
34-
- "-n"
35-
- "$(AGIC_POD_NAMESPACE)"
36-
- "overlayextensionconfigs.acn.azure.com"
37-
- "-l"
30+
- "/appgw-ingress"
31+
- "--cleanup-oec"
3832
- "app.kubernetes.io/managed-by=ingress-appgw-helm"
3933
securityContext:
4034
capabilities:

pkg/cni/cleanup.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package cni
2+
3+
import (
4+
"context"
5+
6+
overlayv1alpha1 "github.com/Azure/azure-container-networking/crd/overlayextensionconfig/api/v1alpha1"
7+
"k8s.io/apimachinery/pkg/api/meta"
8+
"k8s.io/klog/v2"
9+
"sigs.k8s.io/controller-runtime/pkg/client"
10+
)
11+
12+
func CleanupOverlayExtensionConfigs(k8sClient client.Client, namespace string, addonMode bool) error {
13+
// Define a label selector for filtering the resources to delete.
14+
managedByValue := ResourceManagedByHelmValue
15+
if addonMode {
16+
managedByValue = ResourceManagedByAddonValue
17+
}
18+
19+
// Perform cleanup of OverlayExtensionConfig resources.
20+
if err := cleanupOverlayExtensionConfigs(k8sClient, namespace, managedByValue); err != nil {
21+
klog.Errorf("Error cleaning up OverlayExtensionConfig resources: %v", err)
22+
return err
23+
}
24+
25+
klog.Infof("Cleanup completed successfully.")
26+
return nil
27+
}
28+
29+
// cleanupOverlayExtensionConfigs lists and deletes OverlayExtensionConfig resources in the given namespace
30+
// that match the provided label selector. If the CRD is not present, it logs a warning and returns nil.
31+
func cleanupOverlayExtensionConfigs(c client.Client, namespace string, label string) error {
32+
ctx := context.Background()
33+
34+
// Create an empty list to hold OverlayExtensionConfig resources.
35+
var overlayList overlayv1alpha1.OverlayExtensionConfigList
36+
37+
// List the resources with the provided namespace and label selector.
38+
if err := c.List(ctx, &overlayList,
39+
client.InNamespace(namespace),
40+
client.MatchingLabels(map[string]string{ResourceManagedByLabel: label})); err != nil {
41+
// If the API server does not recognize the CRD, skip cleanup.
42+
if meta.IsNoMatchError(err) {
43+
klog.Warning("CRD OverlayExtensionConfig not found in the cluster. Skipping cleanup.")
44+
return nil
45+
}
46+
return err
47+
}
48+
49+
// If no resources are found, log and exit.
50+
if len(overlayList.Items) == 0 {
51+
klog.Infof("No OverlayExtensionConfig resources found in namespace %q with labels %q", namespace, label)
52+
return nil
53+
}
54+
55+
// Iterate through and delete each OverlayExtensionConfig resource.
56+
var deletionError error
57+
for _, item := range overlayList.Items {
58+
klog.Infof("Deleting OverlayExtensionConfig: %q", item.Name)
59+
if err := c.Delete(ctx, &item, &client.DeleteOptions{}); err != nil {
60+
klog.Errorf("Error deleting resource %q: %v", item.Name, err)
61+
deletionError = err
62+
} else {
63+
klog.Infof("Successfully deleted resource %q", item.Name)
64+
}
65+
}
66+
67+
return deletionError
68+
}

0 commit comments

Comments
 (0)