From 6a3ed7bfe094eb3915834aa3d6be137e1c3f27d6 Mon Sep 17 00:00:00 2001 From: jpts Date: Mon, 15 May 2023 00:40:45 +0100 Subject: [PATCH] feat: centralise session init --- cmd/exec.go | 30 ++++++++++++++++++++++++------ cmd/kubeletexec.go | 8 +------- cmd/root.go | 37 ++++++++++++++++++------------------- 3 files changed, 43 insertions(+), 32 deletions(-) diff --git a/cmd/exec.go b/cmd/exec.go index 25fd0fe..4ef037e 100644 --- a/cmd/exec.go +++ b/cmd/exec.go @@ -51,9 +51,28 @@ const ( type cliSession struct { opts Options clientConf *rest.Config + k8sClient *kubernetes.Clientset namespace string } +func NewCliSession(o *Options) (*cliSession, error) { + c := &cliSession{ + opts: *o, + } + + err := c.prepConfig() + if err != nil { + return nil, err + } + + c.k8sClient, err = kubernetes.NewForConfig(c.clientConf) + if err != nil { + return nil, err + } + + return c, nil +} + // prep the session func (c *cliSession) prepConfig() error { var cfg clientcmd.ClientConfig @@ -92,13 +111,12 @@ func (c *cliSession) prepConfig() error { c.clientConf.UserAgent = fmt.Sprintf("kubectl-execws/%s", releaseVersion) - if !c.opts.noSanityCheck { - client, err := kubernetes.NewForConfig(c.clientConf) - if err != nil { - return err - } + return nil +} - res, err := client.CoreV1().Pods(c.namespace).Get(context.TODO(), c.opts.Pod, metav1.GetOptions{}) +func (c *cliSession) sanityCheck() error { + if !c.opts.noSanityCheck { + res, err := c.k8sClient.CoreV1().Pods(c.namespace).Get(context.TODO(), c.opts.Pod, metav1.GetOptions{}) if err != nil { return err } diff --git a/cmd/kubeletexec.go b/cmd/kubeletexec.go index c52b1b5..2416b34 100644 --- a/cmd/kubeletexec.go +++ b/cmd/kubeletexec.go @@ -8,7 +8,6 @@ import ( "net/url" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" "k8s.io/klog/v2" ) @@ -19,12 +18,7 @@ func (c *cliSession) getNodeIP() (string, error) { return c.opts.directExecNodeIp, nil } - client, err := kubernetes.NewForConfig(c.clientConf) - if err != nil { - return "", err - } - - res, err := client.CoreV1().Nodes().Get(context.TODO(), c.opts.PodSpec.NodeName, metav1.GetOptions{}) + res, err := c.k8sClient.CoreV1().Nodes().Get(context.TODO(), c.opts.PodSpec.NodeName, metav1.GetOptions{}) if err != nil { return "", err } diff --git a/cmd/root.go b/cmd/root.go index 9458c04..2dd6114 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -61,21 +61,23 @@ var rootCmd = &cobra.Command{ } } - s := &cliSession{ - opts: Options{ - Command: command, - Container: container, - Kconfig: kconfig, - Namespace: namespace, - Object: object, - Pod: pod, - Stdin: stdinFlag, - TTY: tty, - noSanityCheck: noSanityCheck, - noTLSVerify: noTLSVerify, - directExec: directExec, - directExecNodeIp: directExecNodeIp, - }, + opts := Options{ + Command: command, + Container: container, + Kconfig: kconfig, + Namespace: namespace, + Object: object, + Pod: pod, + Stdin: stdinFlag, + TTY: tty, + noSanityCheck: noSanityCheck, + noTLSVerify: noTLSVerify, + directExec: directExec, + directExecNodeIp: directExecNodeIp, + } + s, err := NewCliSession(&opts) + if err != nil { + return err } if s.opts.noSanityCheck && s.opts.directExec { @@ -91,10 +93,7 @@ var rootCmd = &cobra.Command{ flag.Set("v", fmt.Sprint(loglevel)) flag.Set("stderrthreshold", fmt.Sprint(loglevel)) - err := s.prepConfig() - if err != nil { - return err - } + s.sanityCheck() var req *http.Request if s.opts.directExec {