Skip to content

Commit d59b5fa

Browse files
committed
feat: Add agones-mc finalizers to resources
Adding finalizers will ensure that resources get cleaned up before deletion
1 parent d159dae commit d59b5fa

3 files changed

Lines changed: 56 additions & 2 deletions

File tree

‎controller/internal/controller/annotations.go‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,13 @@ func getLabel(suffix string, obj client.Object) (string, bool) {
6464
}
6565

6666
func setAnnotation(suffix string, value string, obj client.Object) {
67-
6867
key := fmt.Sprintf("%s/%s", AnnotationPrefix, ExternalDnsAnnotation)
6968
annotations := obj.GetAnnotations()
69+
70+
if annotations == nil {
71+
annotations = map[string]string{}
72+
obj.SetAnnotations(annotations)
73+
}
74+
7075
annotations[key] = value
7176
}

‎controller/internal/controller/controller.go‎

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,18 @@ func (r *DnsReconciler) ReconcileDns(ctx context.Context, req reconcile.Request,
3232
domain, domainFound := getDomainAnnotationOrLabel(obj)
3333

3434
if dnsExists {
35-
if schm.IsResourceDeleted(obj) {
35+
if schm.IsResourceDeleted(obj) && findFinalizer(obj) {
3636

3737
if err := r.cleanUpResource(domain, obj); err != nil {
3838
r.Log.Error(err, "Error cleaning up resource DNS", "Resource", schm.GVKString(obj), "Name", obj.GetName())
3939
} else {
4040
r.Log.Info("DNS record removed", "Resource", schm.GVKString(obj), "Name", obj.GetName())
4141
}
42+
43+
if err := r.deleteResource(ctx, obj); err != nil {
44+
return reconcile.Result{}, err
45+
}
46+
4247
}
4348

4449
return reconcile.Result{}, nil
@@ -98,10 +103,16 @@ func (r *DnsReconciler) setupResource(ctx context.Context, hostname string, obj
98103
}
99104

100105
setExternalDnsAnnotation(mcDns.JoinARecordName(hostname, obj.GetName()), obj)
106+
setFinalizer(obj)
101107

102108
if err := r.Update(ctx, obj); err != nil {
103109
return err
104110
}
105111

106112
return nil
107113
}
114+
115+
func (r *DnsReconciler) deleteResource(ctx context.Context, obj client.Object) error {
116+
removeFinalizer(obj)
117+
return r.Update(ctx, obj)
118+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package controller
2+
3+
import (
4+
"sigs.k8s.io/controller-runtime/pkg/client"
5+
)
6+
7+
const Finalizer = "kubernetes.io/agones-mc"
8+
9+
func findFinalizer(obj client.Object) bool {
10+
finalizers := obj.GetFinalizers()
11+
for _, f := range finalizers {
12+
if f == Finalizer {
13+
return true
14+
}
15+
}
16+
return false
17+
}
18+
19+
func setFinalizer(obj client.Object) {
20+
finalizers := obj.GetFinalizers()
21+
22+
if finalizers == nil {
23+
finalizers = []string{}
24+
}
25+
26+
obj.SetFinalizers(append(finalizers, Finalizer))
27+
}
28+
29+
func removeFinalizer(obj client.Object) {
30+
finalizers := obj.GetFinalizers()
31+
newFinalizers := []string{}
32+
for _, f := range finalizers {
33+
if f != Finalizer {
34+
newFinalizers = append(newFinalizers, f)
35+
}
36+
}
37+
obj.SetFinalizers(newFinalizers)
38+
}

0 commit comments

Comments
 (0)