Bläddra i källkod

clean up kubernetes agent

Alexander Belanger 5 år sedan
förälder
incheckning
04ced760a1
3 ändrade filer med 55 tillägg och 37 borttagningar
  1. 9 15
      internal/helm/agent.go
  2. 46 4
      internal/kubernetes/agent.go
  3. 0 18
      internal/kubernetes/client.go

+ 9 - 15
internal/helm/agent.go

@@ -55,31 +55,25 @@ func (h *Form) ToAgent(
 		}}, nil
 	}
 
-	// create a client config using the app's helm/kubernetes agents
-	conf, err := kubernetes.GetRestrictedClientConfigFromBytes(
-		h.KubeConfig,
-		h.Context,
-		h.AllowedContexts,
-	)
-
-	if err != nil {
-		return nil, err
+	// create a kubernetes agent
+	k8sForm := &kubernetes.Form{
+		KubeConfig:      h.KubeConfig,
+		AllowedContexts: h.AllowedContexts,
+		Context:         h.Context,
 	}
 
-	restConf, err := conf.ClientConfig()
-
-	clientset, err := kubernetes.GetClientsetFromConfig(conf)
+	k8sAgent, err := k8sForm.ToAgent()
 
 	if err != nil {
 		return nil, err
 	}
 
-	// create a new agent
+	// use k8s agent to create a new helm agent
 	actionConfig, err := NewActionConfig(
 		l,
 		StorageMap[h.Storage],
-		restConf,
-		clientset,
+		k8sAgent.ClientConfig,
+		k8sAgent.Clientset,
 		h.Namespace,
 	)
 

+ 46 - 4
internal/kubernetes/agent.go

@@ -6,14 +6,56 @@ import (
 	v1 "k8s.io/api/core/v1"
 	v1Machinery "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/client-go/kubernetes"
+	"k8s.io/client-go/rest"
 )
 
+// Agent is a Kubernetes agent for performing operations that interact with the
+// api server
+type Agent struct {
+	ClientConfig *rest.Config
+	Clientset    *kubernetes.Clientset
+}
+
+// Form represents the options for connecting to a cluster and
+// creating an Agent
+type Form struct {
+	KubeConfig      []byte
+	AllowedContexts []string
+	Context         string `json:"context" form:"required"`
+}
+
+// ToAgent uses the Form to generate an agent
+func (h *Form) ToAgent() (*Agent, error) {
+	// create a client config using the app's helm/kubernetes agents
+	conf, err := GetRestrictedClientConfigFromBytes(
+		h.KubeConfig,
+		h.Context,
+		h.AllowedContexts,
+	)
+
+	if err != nil {
+		return nil, err
+	}
+
+	clientConf, err := conf.ClientConfig()
+
+	if err != nil {
+		return nil, err
+	}
+
+	clientset, err := kubernetes.NewForConfig(clientConf)
+
+	if err != nil {
+		return nil, err
+	}
+
+	return &Agent{clientConf, clientset}, nil
+}
+
 // ListNamespaces simply lists namespaces
-func ListNamespaces(clientset *kubernetes.Clientset) *v1.NamespaceList {
-	namespaces, _ := clientset.CoreV1().Namespaces().List(
+func (a *Agent) ListNamespaces() (*v1.NamespaceList, error) {
+	return a.Clientset.CoreV1().Namespaces().List(
 		context.TODO(),
 		v1Machinery.ListOptions{},
 	)
-
-	return namespaces
 }

+ 0 - 18
internal/kubernetes/client.go

@@ -1,18 +0,0 @@
-package kubernetes
-
-import (
-	"k8s.io/client-go/kubernetes"
-	"k8s.io/client-go/tools/clientcmd"
-)
-
-// GetClientsetFromConfig is a simple wrapper that returns a *kubernetes.Clientset based on
-// a clientcmd.ClientConfig
-func GetClientsetFromConfig(conf clientcmd.ClientConfig) (*kubernetes.Clientset, error) {
-	clientConf, err := conf.ClientConfig()
-
-	if err != nil {
-		return nil, err
-	}
-
-	return kubernetes.NewForConfig(clientConf)
-}