@@ -36,26 +36,60 @@ import (
3636)
3737
3838const (
39- clientAuthValidFor = time .Hour * 24 * 365 // 1yr
40- clientAuthCurve = "P256"
39+ clientAuthValidFor = time .Hour * 24 * 365 // 1yr
40+ clientAuthCurve = "P256"
41+ labelKeyOriginalDeployment = "original-deployment-name"
4142)
4243
4344// createAccessPackages creates a arangosync access packages specified
4445// in spec.sync.externalAccess.accessPackageSecretNames.
4546func (d * Deployment ) createAccessPackages () error {
47+ log := d .deps .Log
4648 spec := d .apiObject .Spec
49+ secrets := d .deps .KubeCli .CoreV1 ().Secrets (d .GetNamespace ())
4750
4851 if ! spec .Sync .IsEnabled () {
4952 // We're only relevant when sync is enabled
5053 return nil
5154 }
5255
56+ // Create all access packages that we're asked to build
57+ apNameMap := make (map [string ]struct {})
5358 for _ , apSecretName := range spec .Sync .ExternalAccess .AccessPackageSecretNames {
59+ apNameMap [apSecretName ] = struct {}{}
5460 if err := d .ensureAccessPackage (apSecretName ); err != nil {
5561 return maskAny (err )
5662 }
5763 }
5864
65+ // Remove all access packages that we did build, but are no longer needed
66+ secretList , err := secrets .List (metav1.ListOptions {})
67+ if err != nil {
68+ log .Debug ().Err (err ).Msg ("Failed to list secrets" )
69+ return maskAny (err )
70+ }
71+ for _ , secret := range secretList .Items {
72+ if d .isOwnerOf (& secret ) {
73+ if _ , found := secret .Data [constants .SecretAccessPackageYaml ]; found {
74+ // Secret is an access package
75+ if _ , wanted := apNameMap [secret .GetName ()]; ! wanted {
76+ // We found an obsolete access package secret. Remove it.
77+ if err := secrets .Delete (secret .GetName (), & metav1.DeleteOptions {
78+ Preconditions : & metav1.Preconditions {UID : & secret .UID },
79+ }); err != nil && ! k8sutil .IsNotFound (err ) {
80+ // Not serious enough to stop everything now, just log and create an event
81+ log .Warn ().Err (err ).Msg ("Failed to remove obsolete access package secret" )
82+ d .CreateEvent (k8sutil .NewErrorEvent ("Access Package cleanup failed" , err , d .apiObject ))
83+ } else {
84+ // Access package removed, notify user
85+ log .Info ().Str ("secret-name" , secret .GetName ()).Msg ("Removed access package Secret" )
86+ d .CreateEvent (k8sutil .NewAccessPackageDeletedEvent (d .apiObject , secret .GetName ()))
87+ }
88+ }
89+ }
90+ }
91+ }
92+
5993 return nil
6094}
6195
@@ -117,7 +151,7 @@ func (d *Deployment) ensureAccessPackage(apSecretName string) error {
117151 ObjectMeta : metav1.ObjectMeta {
118152 Name : apSecretName + "-auth" ,
119153 Labels : map [string ]string {
120- "remote-deployment" : d .apiObject .GetName (),
154+ labelKeyOriginalDeployment : d .apiObject .GetName (),
121155 },
122156 },
123157 Data : map [string ][]byte {
@@ -133,7 +167,7 @@ func (d *Deployment) ensureAccessPackage(apSecretName string) error {
133167 ObjectMeta : metav1.ObjectMeta {
134168 Name : apSecretName + "-ca" ,
135169 Labels : map [string ]string {
136- "remote-deployment" : d .apiObject .GetName (),
170+ labelKeyOriginalDeployment : d .apiObject .GetName (),
137171 },
138172 },
139173 Data : map [string ][]byte {
0 commit comments