driver.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package helm
  2. // Helm contains support for several different storage drivers.
  3. //
  4. // This includes (as of October 2020):
  5. // - configmap
  6. // - secret
  7. // - memory
  8. // - postgres
  9. //
  10. // This file implements first-class support for each driver type, and integrates with the
  11. // logger.
  12. import (
  13. "github.com/porter-dev/porter/internal/logger"
  14. "helm.sh/helm/v3/pkg/storage"
  15. "helm.sh/helm/v3/pkg/storage/driver"
  16. "k8s.io/client-go/kubernetes"
  17. )
  18. // NewStorageDriver is a function type for returning a new storage driver
  19. type NewStorageDriver func(l *logger.Logger, namespace string, clientset *kubernetes.Clientset) *storage.Storage
  20. // StorageMap is a map from storage configuration env variables to a function
  21. // that initializes that Helm storage driver.
  22. var StorageMap map[string]NewStorageDriver = map[string]NewStorageDriver{
  23. "secret": newSecretStorageDriver,
  24. "configmap": newConfigMapsStorageDriver,
  25. "memory": newMemoryStorageDriver,
  26. }
  27. // NewSecretStorageDriver returns a storage using the Secret driver.
  28. func newSecretStorageDriver(
  29. l *logger.Logger,
  30. namespace string,
  31. clientset *kubernetes.Clientset,
  32. ) *storage.Storage {
  33. d := driver.NewSecrets(clientset.CoreV1().Secrets(namespace))
  34. d.Log = l.Printf
  35. return storage.Init(d)
  36. }
  37. // NewConfigMapsStorageDriver returns a storage using the ConfigMap driver.
  38. func newConfigMapsStorageDriver(
  39. l *logger.Logger,
  40. namespace string,
  41. clientset *kubernetes.Clientset,
  42. ) *storage.Storage {
  43. d := driver.NewConfigMaps(clientset.CoreV1().ConfigMaps(namespace))
  44. d.Log = l.Printf
  45. return storage.Init(d)
  46. }
  47. // NewMemoryStorageDriver returns a storage using the In-Memory driver.
  48. func newMemoryStorageDriver(
  49. _ *logger.Logger,
  50. namespace string,
  51. _ *kubernetes.Clientset,
  52. ) *storage.Storage {
  53. d := driver.NewMemory()
  54. return storage.Init(d)
  55. }