github.com/grafana/tanka@v0.26.1-0.20240506093700-c22cfc35c21a/pkg/kubernetes/client/exec.go (about)

     1  package client
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"os/exec"
     7  )
     8  
     9  // kubectlCmd returns command a object that will launch kubectl at an appropriate path.
    10  func kubectlCmd(args ...string) *exec.Cmd {
    11  	binary := "kubectl"
    12  	if env := os.Getenv("TANKA_KUBECTL_PATH"); env != "" {
    13  		binary = env
    14  	}
    15  
    16  	return exec.Command(binary, args...)
    17  }
    18  
    19  // ctl returns an `exec.Cmd` for `kubectl`. It also forces the correct context
    20  // and injects our patched $KUBECONFIG for the default namespace.
    21  func (k Kubectl) ctl(action string, args ...string) *exec.Cmd {
    22  	// prepare the arguments
    23  	argv := []string{action,
    24  		"--context", k.info.Kubeconfig.Context.Name,
    25  	}
    26  	argv = append(argv, args...)
    27  
    28  	// prepare the cmd
    29  	cmd := kubectlCmd(argv...)
    30  
    31  	if os.Getenv("TANKA_KUBECTL_TRACE") != "" {
    32  		fmt.Println(cmd.String())
    33  	}
    34  
    35  	return cmd
    36  }