* Secrets: changes to allow a 3rd party keeper / secret references * fix test * make gofmt * lint * fix tests * assign aws secrets manager to @grafana/grafana-operator-experience-squad * rename Keeper.Reference to Keeper.RetrieveReference * rename ModelSecretsManager to ModelAWSSecretsManager * validator: ensure that only one of keeper.Spec.Aws.AccessKey or keeper.Spec.Aws.AssumeRole are set * move secrets manager dep / go mod tidy * move secrets manager dep * keeper validator: move 3rd party secret stores validation to their own functions * add github.com/aws/aws-sdk-go-v2/service/secretsmanager pkg/extensions/enterprise_imports * make update-workspace * undo go.mod changes in /apps * make update-workspace * fix test * add github.com/aws/aws-sdk-go-v2/service/secretsmanager to enterprise_imports * make update-workspace * gcworker: handle refs * make update-workspace * create toggle: FeatureStageExperimental * allow features.IsEnabled for now * format
97 lines
3.5 KiB
Go
97 lines
3.5 KiB
Go
package testutils
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
secretv1beta1 "github.com/grafana/grafana/apps/secret/pkg/apis/secret/v1beta1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/utils/ptr"
|
|
"pgregory.net/rapid"
|
|
)
|
|
|
|
var (
|
|
DecryptersGen = rapid.SampledFrom([]string{"svc1", "svc2", "svc3", "svc4", "svc5"})
|
|
SecureValueNameGen = rapid.SampledFrom([]string{"n1", "n2", "n3", "n4", "n5"})
|
|
KeeperNameGen = rapid.SampledFrom([]string{"k1", "k2", "k3", "k4", "k5"})
|
|
NamespaceGen = rapid.SampledFrom([]string{"ns1", "ns2", "ns3", "ns4", "ns5"})
|
|
SecretsToRefGen = rapid.SampledFrom([]string{"ref1", "ref2", "ref3", "ref4", "ref5"})
|
|
// Generator for secure values that specify a secret value
|
|
AnySecureValueGen = rapid.Custom(func(t *rapid.T) *secretv1beta1.SecureValue {
|
|
return &secretv1beta1.SecureValue{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: SecureValueNameGen.Draw(t, "name"),
|
|
Namespace: NamespaceGen.Draw(t, "ns"),
|
|
},
|
|
Spec: secretv1beta1.SecureValueSpec{
|
|
Description: rapid.SampledFrom([]string{"d1", "d2", "d3", "d4", "d5"}).Draw(t, "description"),
|
|
Value: ptr.To(secretv1beta1.NewExposedSecureValue(rapid.SampledFrom([]string{"v1", "v2", "v3", "v4", "v5"}).Draw(t, "value"))),
|
|
Decrypters: rapid.SliceOfDistinct(DecryptersGen, func(v string) string { return v }).Draw(t, "decrypters"),
|
|
},
|
|
Status: secretv1beta1.SecureValueStatus{},
|
|
}
|
|
})
|
|
// Generator for secure values that reference values from 3rd party stores
|
|
AnySecureValueWithRefGen = rapid.Custom(func(t *rapid.T) *secretv1beta1.SecureValue {
|
|
return &secretv1beta1.SecureValue{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: SecureValueNameGen.Draw(t, "name"),
|
|
Namespace: NamespaceGen.Draw(t, "ns"),
|
|
},
|
|
Spec: secretv1beta1.SecureValueSpec{
|
|
Description: rapid.SampledFrom([]string{"d1", "d2", "d3", "d4", "d5"}).Draw(t, "description"),
|
|
Ref: ptr.To(SecretsToRefGen.Draw(t, "ref")),
|
|
Decrypters: rapid.SliceOfDistinct(DecryptersGen, func(v string) string { return v }).Draw(t, "decrypters"),
|
|
},
|
|
Status: secretv1beta1.SecureValueStatus{},
|
|
}
|
|
})
|
|
UpdateSecureValueGen = rapid.Custom(func(t *rapid.T) *secretv1beta1.SecureValue {
|
|
sv := AnySecureValueGen.Draw(t, "sv")
|
|
// Maybe update the secret value, maybe not
|
|
if !rapid.Bool().Draw(t, "should_update_value") {
|
|
sv.Spec.Value = nil
|
|
}
|
|
return sv
|
|
})
|
|
DecryptGen = rapid.Custom(func(t *rapid.T) DecryptInput {
|
|
return DecryptInput{
|
|
Namespace: NamespaceGen.Draw(t, "ns"),
|
|
Name: SecureValueNameGen.Draw(t, "name"),
|
|
Decrypter: DecryptersGen.Draw(t, "decrypter"),
|
|
}
|
|
})
|
|
AnyKeeperGen = rapid.Custom(func(t *rapid.T) *secretv1beta1.Keeper {
|
|
spec := secretv1beta1.KeeperSpec{
|
|
Description: rapid.String().Draw(t, "description"),
|
|
}
|
|
|
|
keeperType := rapid.SampledFrom([]string{"isAwsKeeper", "isAzureKeeper", "isGcpKeeper", "isVaultKeeper"}).Draw(t, "keeperType")
|
|
switch keeperType {
|
|
case "isAwsKeeper":
|
|
spec.Aws = &secretv1beta1.KeeperAWSConfig{}
|
|
case "isAzureKeeper":
|
|
spec.Azure = &secretv1beta1.KeeperAzureConfig{}
|
|
case "isGcpKeeper":
|
|
spec.Gcp = &secretv1beta1.KeeperGCPConfig{}
|
|
case "isVaultKeeper":
|
|
spec.HashiCorpVault = &secretv1beta1.KeeperHashiCorpConfig{}
|
|
default:
|
|
panic(fmt.Sprintf("unhandled keeper type '%+v', did you forget a switch case?", keeperType))
|
|
}
|
|
|
|
return &secretv1beta1.Keeper{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: KeeperNameGen.Draw(t, "name"),
|
|
Namespace: NamespaceGen.Draw(t, "ns"),
|
|
},
|
|
Spec: spec,
|
|
}
|
|
})
|
|
)
|
|
|
|
type DecryptInput struct {
|
|
Namespace string
|
|
Name string
|
|
Decrypter string
|
|
}
|