Skip to content

Commit e98cc54

Browse files
add a post uninstall step that deletes leftover secrets (#610)
* add a post uninstall step that deletes leftover secrets * bump * bump
1 parent f17b72a commit e98cc54

File tree

6 files changed

+60
-4
lines changed

6 files changed

+60
-4
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
VERSION=v0.0.554
1+
VERSION=v0.0.555
22

33
OUT_DIR=dist
44
YEAR?=$(shell date +"%Y")

cmd/commands/runtime.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"sync"
2828
"time"
2929

30+
kubeutil "github.com/codefresh-io/cli-v2/pkg/util/kube"
3031
routingutil "github.com/codefresh-io/cli-v2/pkg/util/routing"
3132

3233
"github.com/codefresh-io/cli-v2/pkg/log"
@@ -500,6 +501,7 @@ func runRuntimeUninstall(ctx context.Context, opts *RuntimeUninstallOptions) err
500501

501502
// check whether the runtime exists
502503
var err error
504+
503505
if !opts.SkipChecks {
504506
_, err = getRuntime(ctx, opts.RuntimeName)
505507
}
@@ -575,12 +577,33 @@ func runRuntimeUninstall(ctx context.Context, opts *RuntimeUninstallOptions) err
575577
cfConfig.GetCurrentContext().DefaultRuntime = ""
576578
}
577579

580+
err = runPostUninstallCleanup(ctx, opts.KubeFactory, opts.RuntimeName)
581+
if err != nil {
582+
return fmt.Errorf("failed to do post uninstall cleanup: %w", err)
583+
}
584+
578585
uninstallDoneStr := fmt.Sprintf("Done uninstalling runtime \"%s\"", opts.RuntimeName)
579586
appendLogToSummary(uninstallDoneStr, nil)
580587

581588
return nil
582589
}
583590

591+
func runPostUninstallCleanup(ctx context.Context, kubeFactory kube.Factory, namespace string) error {
592+
secrets, err := kubeutil.GetSecretsWithLabel(ctx, kubeFactory, namespace, store.Get().LabelSelectorSealedSecret)
593+
if err != nil {
594+
return err
595+
}
596+
597+
for _, secret := range secrets.Items {
598+
err = kubeutil.DeleteSecretWithFinalizer(ctx, kubeFactory, &secret)
599+
if err != nil {
600+
log.G().Warn("failed to delete secret: %w", err)
601+
}
602+
}
603+
604+
return nil
605+
}
606+
584607
func printApplicationsState(ctx context.Context, runtime string, f kube.Factory, managed bool) error {
585608
if managed {
586609
return nil

docs/releases/release_notes.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ cf version
2323

2424
```bash
2525
# download and extract the binary
26-
curl -L --output - https://github.com/codefresh-io/cli-v2/releases/download/v0.0.554/cf-linux-amd64.tar.gz | tar zx
26+
curl -L --output - https://github.com/codefresh-io/cli-v2/releases/download/v0.0.555/cf-linux-amd64.tar.gz | tar zx
2727

2828
# move the binary to your $PATH
2929
mv ./cf-linux-amd64 /usr/local/bin/cf
@@ -36,7 +36,7 @@ cf version
3636

3737
```bash
3838
# download and extract the binary
39-
curl -L --output - https://github.com/codefresh-io/cli-v2/releases/download/v0.0.554/cf-darwin-amd64.tar.gz | tar zx
39+
curl -L --output - https://github.com/codefresh-io/cli-v2/releases/download/v0.0.555/cf-darwin-amd64.tar.gz | tar zx
4040

4141
# move the binary to your $PATH
4242
mv ./cf-darwin-amd64 /usr/local/bin/cf

manifests/runtime.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ metadata:
55
namespace: "{{ namespace }}"
66
spec:
77
defVersion: 2.1.1
8-
version: 0.0.554
8+
version: 0.0.555
99
bootstrapSpecifier: github.com/codefresh-io/cli-v2/manifests/argo-cd
1010
components:
1111
- name: events

pkg/store/store.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ type Store struct {
8383
DocsLink string
8484
LabelKeyCFType string
8585
LabelKeyCFInternal string
86+
LabelSelectorSealedSecret string
8687
AnnotationKeySyncWave string
8788
MarketplaceGitSourceName string
8889
MarketplaceRepo string
@@ -193,6 +194,7 @@ func init() {
193194
s.DocsLink = "https://codefresh.io/csdp-docs/"
194195
s.LabelKeyCFType = "codefresh.io/entity"
195196
s.LabelKeyCFInternal = "codefresh.io/internal"
197+
s.LabelSelectorSealedSecret = "codefresh.io/sealing-key=true"
196198
s.AnnotationKeySyncWave = "argocd.argoproj.io/sync-wave"
197199
s.MaxDefVersion = semver.MustParse(maxDefVersion)
198200
s.RuntimeDefURL = RuntimeDefURL

pkg/util/kube/kube.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,3 +611,34 @@ func CheckNamespaceExists(ctx context.Context, namespace string, kubeFactory kub
611611

612612
return true, nil
613613
}
614+
615+
func DeleteSecretWithFinalizer(ctx context.Context, kubeFactory kube.Factory, secret *v1.Secret) error {
616+
client, err := kubeFactory.KubernetesClientSet()
617+
if err != nil {
618+
return fmt.Errorf("failed to create kubernetes client: %w", err)
619+
}
620+
621+
secret.Finalizers = nil
622+
secret, err = client.CoreV1().Secrets(secret.Namespace).Update(ctx, secret, metav1.UpdateOptions{})
623+
if err != nil {
624+
return fmt.Errorf("failed to remove finalizers from secret %s", secret.Name)
625+
}
626+
627+
err = client.CoreV1().Secrets(secret.Namespace).Delete(ctx, secret.Name, metav1.DeleteOptions{})
628+
629+
return err
630+
}
631+
632+
func GetSecretsWithLabel(ctx context.Context, kubeFactory kube.Factory, namespace, label string) (*v1.SecretList, error) {
633+
client, err := kubeFactory.KubernetesClientSet()
634+
if err != nil {
635+
return nil, fmt.Errorf("failed to create kubernetes client: %w", err)
636+
}
637+
638+
secrets, err := client.CoreV1().Secrets(namespace).List(ctx, metav1.ListOptions{LabelSelector: label})
639+
if err != nil {
640+
return nil, fmt.Errorf("failed to get secrets: %w", err)
641+
}
642+
643+
return secrets, nil
644+
}

0 commit comments

Comments
 (0)