provider.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package aws
  2. import (
  3. "context"
  4. "fmt"
  5. "sigs.k8s.io/controller-runtime/pkg/client"
  6. esv1alpha1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1alpha1"
  7. "github.com/external-secrets/external-secrets/pkg/provider"
  8. "github.com/external-secrets/external-secrets/pkg/provider/aws/parameterstore"
  9. "github.com/external-secrets/external-secrets/pkg/provider/aws/secretsmanager"
  10. awssess "github.com/external-secrets/external-secrets/pkg/provider/aws/session"
  11. "github.com/external-secrets/external-secrets/pkg/provider/schema"
  12. )
  13. // Provider satisfies the provider interface.
  14. type Provider struct{}
  15. // NewClient constructs a new secrets client based on the provided store.
  16. func (p *Provider) NewClient(ctx context.Context, store esv1alpha1.GenericStore, kube client.Client, namespace string) (provider.SecretsClient, error) {
  17. if store == nil {
  18. return nil, fmt.Errorf("store is nil")
  19. }
  20. spec := store.GetSpec()
  21. if spec == nil {
  22. return nil, fmt.Errorf("store is missing spec")
  23. }
  24. if spec.Provider == nil {
  25. return nil, fmt.Errorf("storeSpec is missing provider")
  26. }
  27. if spec.Provider.AWS == nil {
  28. return nil, fmt.Errorf("storeSpec is missing aws spec")
  29. }
  30. switch spec.Provider.AWS.Service {
  31. case esv1alpha1.AWSServiceSecretsManager:
  32. return secretsmanager.New(ctx, store, kube, namespace, awssess.DefaultSTSProvider)
  33. case esv1alpha1.AWSServiceParameterStore:
  34. return parameterstore.New(ctx, store, kube, namespace, awssess.DefaultSTSProvider)
  35. }
  36. return nil, fmt.Errorf("unknown AWS Provider Service: %s", spec.Provider.AWS.Service)
  37. }
  38. func init() {
  39. schema.Register(&Provider{}, &esv1alpha1.SecretStoreProvider{
  40. AWS: &esv1alpha1.AWSProvider{},
  41. })
  42. }