@@ -30,16 +30,18 @@ import (
3030)
3131
3232type KustomizeGarbageCollector struct {
33- snapshot kustomizev1.Snapshot
34- log logr.Logger
33+ snapshot kustomizev1.Snapshot
34+ newChecksum string
35+ log logr.Logger
3536 client.Client
3637}
3738
38- func NewGarbageCollector (kubeClient client.Client , snapshot kustomizev1.Snapshot , log logr.Logger ) * KustomizeGarbageCollector {
39+ func NewGarbageCollector (kubeClient client.Client , snapshot kustomizev1.Snapshot , newChecksum string , log logr.Logger ) * KustomizeGarbageCollector {
3940 return & KustomizeGarbageCollector {
40- Client : kubeClient ,
41- snapshot : snapshot ,
42- log : log ,
41+ Client : kubeClient ,
42+ snapshot : snapshot ,
43+ newChecksum : newChecksum ,
44+ log : log ,
4345 }
4446}
4547
@@ -65,10 +67,10 @@ func (kgc *KustomizeGarbageCollector) Prune(timeout time.Duration, name string,
6567 Version : gvk .Version ,
6668 })
6769
68- err := kgc .List (ctx , ulist , client .InNamespace (ns ), kgc .matchingLabels (name , namespace , kgc . snapshot . Checksum ))
70+ err := kgc .List (ctx , ulist , client .InNamespace (ns ), kgc .matchingLabels (name , namespace ))
6971 if err == nil {
7072 for _ , item := range ulist .Items {
71- if item .GetDeletionTimestamp ().IsZero () {
73+ if kgc . isStale ( item ) && item .GetDeletionTimestamp ().IsZero () {
7274 name := fmt .Sprintf ("%s/%s/%s" , item .GetKind (), item .GetNamespace (), item .GetName ())
7375 err = kgc .Delete (ctx , & item )
7476 if err != nil {
@@ -94,10 +96,10 @@ func (kgc *KustomizeGarbageCollector) Prune(timeout time.Duration, name string,
9496 Version : gvk .Version ,
9597 })
9698
97- err := kgc .List (ctx , ulist , kgc .matchingLabels (name , namespace , kgc . snapshot . Checksum ))
99+ err := kgc .List (ctx , ulist , kgc .matchingLabels (name , namespace ))
98100 if err == nil {
99101 for _ , item := range ulist .Items {
100- if item .GetDeletionTimestamp ().IsZero () {
102+ if kgc . isStale ( item ) && item .GetDeletionTimestamp ().IsZero () {
101103 name := fmt .Sprintf ("%s/%s" , item .GetKind (), item .GetName ())
102104 err = kgc .Delete (ctx , & item )
103105 if err != nil {
@@ -120,8 +122,13 @@ func (kgc *KustomizeGarbageCollector) Prune(timeout time.Duration, name string,
120122 return changeSet , true
121123}
122124
123- func (kgc * KustomizeGarbageCollector ) matchingLabels (name , namespace , checksum string ) client.MatchingLabels {
124- return gcLabels (name , namespace , checksum )
125+ func (kgc * KustomizeGarbageCollector ) isStale (obj unstructured.Unstructured ) bool {
126+ itemChecksum := obj .GetLabels ()[fmt .Sprintf ("%s/checksum" , kustomizev1 .GroupVersion .Group )]
127+ return kgc .newChecksum == "" || itemChecksum != kgc .newChecksum
128+ }
129+
130+ func (kgc * KustomizeGarbageCollector ) matchingLabels (name , namespace string ) client.MatchingLabels {
131+ return selectorLabels (name , namespace )
125132}
126133
127134func gcLabels (name , namespace , checksum string ) map [string ]string {
0 commit comments