Skip to content

Commit

Permalink
Invert flag logic
Browse files Browse the repository at this point in the history
  • Loading branch information
Jose Luis Vazquez Gonzalez committed Mar 3, 2023
1 parent ac73912 commit f2d971f
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 14 deletions.
4 changes: 2 additions & 2 deletions carvel/package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ spec:
type: boolean
description: Specifies whether the Sealed Secrets controller should update the status subresource
default: true
recreate:
skip-recreate:
type: boolean
description: Specifies whether the Sealed Secrets controller should recreate removed secrets
description: Specifies whether the Sealed Secrets controller should skip recreating removed secrets
default: false
keyrenewperiod:
type: string
Expand Down
2 changes: 1 addition & 1 deletion cmd/controller/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func bindControllerFlags(f *controller.Flags, fs *flag.FlagSet) {

fs.BoolVar(&f.UpdateStatus, "update-status", true, "beta: if true, the controller will update the status sub-resource whenever it processes a sealed secret")

fs.BoolVar(&f.Recreate, "recreate", true, "if true the controller will listen for secret changes to recreate managed secrets on removal. Helps setting it to false on limited permission environments.")
fs.BoolVar(&f.SkipRecreate, "skip-recreate", false, "if true the controller will skip listening for managed secret changes to recreate them. This helps on limited permission environments.")

fs.DurationVar(&f.KeyRenewPeriod, "rotate-period", defaultKeyRenewPeriod, "")
_ = fs.MarkDeprecated("rotate-period", "please use key-renew-period instead")
Expand Down
2 changes: 1 addition & 1 deletion helm/sealed-secrets/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ The command removes all the Kubernetes components associated with the chart and
| `createController` | Specifies whether the Sealed Secrets controller should be created | `true` |
| `secretName` | The name of an existing TLS secret containing the key used to encrypt secrets | `sealed-secrets-key` |
| `updateStatus` | Specifies whether the Sealed Secrets controller should update the status subresource | `true` |
| `recreate ` | Specifies whether the Sealed Secrets controller should recreate removed secrets | `false` |
| `skip-recreate` | Specifies whether the Sealed Secrets controller should skip recreating removed secrets | `false` |
| `keyrenewperiod` | Specifies key renewal period. Default 30 days | `""` |
| `rateLimit` | Number of allowed sustained request per second for verify endpoint | `""` |
| `rateLimitBurst` | Number of requests allowed to exceed the rate limit per second for verify endpoint | `""` |
Expand Down
2 changes: 1 addition & 1 deletion helm/sealed-secrets/templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ spec:
- --update-status
{{- end }}
{{- if .Values.recreate }}
- --recreate
- --skip-recreate
{{- end }}
{{- if .Values.keyrenewperiod }}
- --key-renew-period
Expand Down
6 changes: 3 additions & 3 deletions helm/sealed-secrets/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,12 @@ secretName: "sealed-secrets-key"
## @param updateStatus Specifies whether the Sealed Secrets controller should update the status subresource
##
updateStatus: true
## @param recreate Specifies whether the Sealed Secrets controller should recreate removed secrets
## Setting it to false allows to optionally restore backward compatibility in low previlege
## @param skip-recreate Specifies whether the Sealed Secrets controller should skip recreating removed secrets
## Setting it to false allows to optionally restore backward compatibility in low priviledge
## environments when old versions of the controller did not require watch permissions on secrets
## for secret re-creation.
##
recreate: true
skip-recreate: false
## @param keyrenewperiod Specifies key renewal period. Default 30 days
## e.g
## keyrenewperiod: "720h30m"
Expand Down
54 changes: 54 additions & 0 deletions pkg/controller/controller_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package controller

import (
"context"
"crypto/rand"
"errors"
"fmt"
"testing"

ssv1alpha1 "github.com/bitnami-labs/sealed-secrets/pkg/apis/sealedsecrets/v1alpha1"
ssinformers "github.com/bitnami-labs/sealed-secrets/pkg/client/informers/externalversions"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)

func TestConvert2SealedSecretBadType(t *testing.T) {
Expand Down Expand Up @@ -45,3 +52,50 @@ func TestConvert2SealedSecretPassThrough(t *testing.T) {
t.Fatalf("got %v want %v", got, want)
}
}

func TestDefaultConfigDoesNotSkipRecreate(t *testing.T) {
ns := "some-namespace"
var tweakopts func(*metav1.ListOptions)
conf := clusterConfig(t)
clientset := clientSetOrDie(conf)
ssc := ssclient.NewForConfigOrDie(conf)
sinformer := InitSecretInformerFactory(clientset, ns, tweakopts, false /* skip-recreate */)
ssinformer := ssinformers.NewFilteredSharedInformerFactory(ssc, 0, ns, tweakopts)
keyRegistry := keyRegister(t, context.Background(), clientset, ns)

_, got := NewController(clientset, ssc, ssinformer, sinformer, keyRegistry)
if got != nil {
t.Fatalf("got %v want %v", got, nil)
}

}

func clusterConfig(t *testing.T) *rest.Config {
t.Helper()

var config *rest.Config
var err error

if *kubeconfig != "" {
config, err = clientcmd.BuildConfigFromFlags("", *kubeconfig)
}
if err != nil {
t.Fatalf("failed to setup kubeconfig", err)
}

return config
}

func keyRegister(t *testing.T, ctx context.Context, clientset *kubernetes.Clientset, ns string) *controller.KeyRegistry {
t.Helper()

keyLabel := controller.SealedSecretsKeyLabel
prefix := "test-keys"
testKeySize := 4096
fmt.Fprintf(GinkgoWriter, "initiating key registry\n")
keyRegistry, err := controller.InitKeyRegistry(ctx, clientset, rand.Reader, ns, prefix, keyLabel, testKeySize)
if err != nil {
t.Fatalf("failed to provision key registry: %v", err)
}
return keyRegistry
}
12 changes: 6 additions & 6 deletions pkg/controller/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ type Flags struct {
RateLimitBurst int
OldGCBehavior bool
UpdateStatus bool
Recreate bool
SkipRecreate bool
}

func initKeyPrefix(keyPrefix string) (string, error) {
Expand Down Expand Up @@ -227,7 +227,7 @@ func Main(f *Flags, version string) error {
}
if ns != namespace {
ssinf = ssinformers.NewFilteredSharedInformerFactory(ssclientset, 0, ns, tweakopts)
sinf = InitSecretInformerFactory(clientset, ns, tweakopts, f.Recreate)
sinf = InitSecretInformerFactory(clientset, ns, tweakopts, f.SkipRecreate)
ctlr, err = NewController(clientset, ssclientset, ssinf, sinf, keyRegistry)
if err != nil {
return err
Expand Down Expand Up @@ -257,9 +257,9 @@ func Main(f *Flags, version string) error {
return server.Shutdown(context.Background())
}

func InitSecretInformerFactory(clientset *kubernetes.Clientset, ns string, tweakopts func(*metav1.ListOptions), recreate bool) informers.SharedInformerFactory {
if recreate {
return informers.NewFilteredSharedInformerFactory(clientset, 0, ns, tweakopts)
func InitSecretInformerFactory(clientset *kubernetes.Clientset, ns string, tweakopts func(*metav1.ListOptions), skipRecreate bool) informers.SharedInformerFactory {
if skipRecreate {
return nil
}
return nil
return informers.NewFilteredSharedInformerFactory(clientset, 0, ns, tweakopts)
}

0 comments on commit f2d971f

Please sign in to comment.