Răsfoiți Sursa

helm agent temp

Alexander Belanger 5 ani în urmă
părinte
comite
f046f3cf18
2 a modificat fișierele cu 50 adăugiri și 9 ștergeri
  1. 39 6
      internal/helm/agent.go
  2. 11 3
      internal/helm/driver.go

+ 39 - 6
internal/helm/agent.go

@@ -1,17 +1,51 @@
 package helm
 
 import (
+	"github.com/porter-dev/porter/internal/logger"
 	"helm.sh/helm/v3/pkg/action"
 	"helm.sh/helm/v3/pkg/release"
+	"k8s.io/client-go/kubernetes"
+	"k8s.io/client-go/rest"
 )
 
+// Agent is a Helm agent for performing helm operations
+type Agent interface {
+	ListReleases(namespace string, filter *ListFilter) ([]*release.Release, error)
+	GetRelease(name string) (*release.Release, error)
+}
+
+// DefaultAgent implements Agent using Helm's action.Configuration
+type DefaultAgent struct {
+	actionConfig *action.Configuration
+}
+
+// NewDefaultAgent creates a new implementation of Agent
+func NewDefaultAgent(
+	l *logger.Logger,
+	storage string,
+	namespace string,
+	config *rest.Config,
+	clientset *kubernetes.Clientset,
+) (*DefaultAgent, error) {
+	// get the storage driver
+	storageDriver := StorageMap[storage]
+
+	// create the action config
+	actionConfig, err := NewActionConfig(l, storageDriver, config, clientset, namespace)
+
+	if err != nil {
+		return nil, err
+	}
+
+	return &DefaultAgent{actionConfig}, nil
+}
+
 // ListReleases lists releases based on a ListFilter
-func ListReleases(
-	actionConfig *action.Configuration,
+func (a *DefaultAgent) ListReleases(
 	namespace string,
 	filter *ListFilter,
 ) ([]*release.Release, error) {
-	cmd := action.NewList(actionConfig)
+	cmd := action.NewList(a.actionConfig)
 
 	filter.apply(cmd)
 
@@ -19,12 +53,11 @@ func ListReleases(
 }
 
 // GetRelease returns the info of a release.
-func GetRelease(
-	actionConfig *action.Configuration,
+func (a *DefaultAgent) GetRelease(
 	name string,
 ) (*release.Release, error) {
 	// Namespace is already known by the RESTClientGetter.
-	cmd := action.NewGet(actionConfig)
+	cmd := action.NewGet(a.actionConfig)
 
 	return cmd.Run(name)
 }

+ 11 - 3
internal/helm/driver.go

@@ -22,8 +22,16 @@ import (
 // NewStorageDriver is a function type for returning a new storage driver
 type NewStorageDriver func(l *logger.Logger, namespace string, clientset *kubernetes.Clientset) *storage.Storage
 
+// StorageMap is a map from storage configuration env variables to a function
+// that initializes that Helm storage driver.
+var StorageMap map[string]NewStorageDriver = map[string]NewStorageDriver{
+	"secret":    newSecretStorageDriver,
+	"configmap": newConfigMapsStorageDriver,
+	"memory":    newMemoryStorageDriver,
+}
+
 // NewSecretStorageDriver returns a storage using the Secret driver.
-func NewSecretStorageDriver(
+func newSecretStorageDriver(
 	l *logger.Logger,
 	namespace string,
 	clientset *kubernetes.Clientset,
@@ -34,7 +42,7 @@ func NewSecretStorageDriver(
 }
 
 // NewConfigMapsStorageDriver returns a storage using the ConfigMap driver.
-func NewConfigMapsStorageDriver(
+func newConfigMapsStorageDriver(
 	l *logger.Logger,
 	namespace string,
 	clientset *kubernetes.Clientset,
@@ -45,7 +53,7 @@ func NewConfigMapsStorageDriver(
 }
 
 // NewMemoryStorageDriver returns a storage using the In-Memory driver.
-func NewMemoryStorageDriver(
+func newMemoryStorageDriver(
 	l *logger.Logger,
 	namespace string,
 	clientset *kubernetes.Clientset,