driver.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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/internal/logger"
  16. "helm.sh/helm/v3/pkg/storage"
  17. "helm.sh/helm/v3/pkg/storage/driver"
  18. "k8s.io/client-go/kubernetes"
  19. )
  20. // NewStorageDriver is a function type for returning a new storage driver
  21. type NewStorageDriver func(l *logger.Logger, namespace string, clientset *kubernetes.Clientset) *storage.Storage
  22. // StorageMap is a map from storage configuration env variables to a function
  23. // that initializes that Helm storage driver.
  24. var StorageMap map[string]NewStorageDriver = map[string]NewStorageDriver{
  25. "secret": newSecretStorageDriver,
  26. "configmap": newConfigMapsStorageDriver,
  27. "memory": newMemoryStorageDriver,
  28. }
  29. // NewSecretStorageDriver returns a storage using the Secret driver.
  30. func newSecretStorageDriver(
  31. l *logger.Logger,
  32. namespace string,
  33. clientset *kubernetes.Clientset,
  34. ) *storage.Storage {
  35. d := driver.NewSecrets(clientset.CoreV1().Secrets(namespace))
  36. d.Log = l.Printf
  37. return storage.Init(d)
  38. }
  39. // NewConfigMapsStorageDriver returns a storage using the ConfigMap driver.
  40. func newConfigMapsStorageDriver(
  41. l *logger.Logger,
  42. namespace string,
  43. clientset *kubernetes.Clientset,
  44. ) *storage.Storage {
  45. d := driver.NewConfigMaps(clientset.CoreV1().ConfigMaps(namespace))
  46. d.Log = l.Printf
  47. return storage.Init(d)
  48. }
  49. // NewMemoryStorageDriver returns a storage using the In-Memory driver.
  50. func newMemoryStorageDriver(
  51. _ *logger.Logger,
  52. namespace string,
  53. _ *kubernetes.Clientset,
  54. ) *storage.Storage {
  55. d := driver.NewMemory()
  56. return storage.Init(d)
  57. }