* SecureValues: Run mutate and validation hooks in service layer * add some unit tests
38 lines
965 B
Go
38 lines
965 B
Go
package mutator
|
|
|
|
import (
|
|
"cmp"
|
|
"fmt"
|
|
|
|
secretv1beta1 "github.com/grafana/grafana/apps/secret/pkg/apis/secret/v1beta1"
|
|
"github.com/grafana/grafana/pkg/registry/apis/secret/contracts"
|
|
"github.com/grafana/grafana/pkg/util"
|
|
"k8s.io/apiserver/pkg/admission"
|
|
)
|
|
|
|
type secureValueMutator struct{}
|
|
|
|
var _ contracts.SecureValueMutator = &secureValueMutator{}
|
|
|
|
func ProvideSecureValueMutator() contracts.SecureValueMutator {
|
|
return &secureValueMutator{}
|
|
}
|
|
|
|
func (*secureValueMutator) Mutate(sv *secretv1beta1.SecureValue, operation admission.Operation) error {
|
|
if sv == nil {
|
|
return fmt.Errorf("expected SecureValue to be non-nil")
|
|
}
|
|
|
|
if operation == admission.Create && sv.Name == "" {
|
|
sv.SetName(cmp.Or(sv.GetGenerateName(), "sv-") + util.GenerateShortUID())
|
|
}
|
|
|
|
// On any mutation to a `SecureValue`, clear the status.
|
|
if operation == admission.Create || operation == admission.Update {
|
|
sv.Status.ExternalID = ""
|
|
sv.Status.Version = 0
|
|
}
|
|
|
|
return nil
|
|
}
|