storage.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 the first three driver types
  11. // and integrates with the logger.
  12. //
  13. // TODO -- include support for SQL storage...
  14. import (
  15. "github.com/porter-dev/porter/pkg/logger"
  16. "helm.sh/helm/v3/pkg/storage"
  17. "helm.sh/helm/v3/pkg/storage/driver"
  18. corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
  19. )
  20. // NewStorageDriver is a function type for returning a new storage driver
  21. type NewStorageDriver func(
  22. l *logger.Logger,
  23. v1Interface corev1.CoreV1Interface,
  24. namespace string,
  25. ) *storage.Storage
  26. // StorageMap is a map from storage configuration env variables to a function
  27. // that initializes that Helm storage driver.
  28. var StorageMap map[string]NewStorageDriver = map[string]NewStorageDriver{
  29. "secret": newSecretStorageDriver,
  30. "configmap": newConfigMapsStorageDriver,
  31. "memory": newMemoryStorageDriver,
  32. }
  33. // NewSecretStorageDriver returns a storage using the Secret driver.
  34. func newSecretStorageDriver(
  35. l *logger.Logger,
  36. v1Interface corev1.CoreV1Interface,
  37. namespace string,
  38. ) *storage.Storage {
  39. d := driver.NewSecrets(v1Interface.Secrets(namespace))
  40. d.Log = l.Printf
  41. return storage.Init(d)
  42. }
  43. // NewConfigMapsStorageDriver returns a storage using the ConfigMap driver.
  44. func newConfigMapsStorageDriver(
  45. l *logger.Logger,
  46. v1Interface corev1.CoreV1Interface,
  47. namespace string,
  48. ) *storage.Storage {
  49. d := driver.NewConfigMaps(v1Interface.ConfigMaps(namespace))
  50. d.Log = l.Printf
  51. return storage.Init(d)
  52. }
  53. // NewMemoryStorageDriver returns a storage using the In-Memory driver.
  54. func newMemoryStorageDriver(
  55. _ *logger.Logger,
  56. _ corev1.CoreV1Interface,
  57. _ string,
  58. ) *storage.Storage {
  59. d := driver.NewMemory()
  60. return storage.Init(d)
  61. }