github.com/grafana/tanka@v0.26.1-0.20240506093700-c22cfc35c21a/pkg/kubernetes/client/delete.go (about) 1 package client 2 3 import ( 4 "bytes" 5 "fmt" 6 "os" 7 "os/exec" 8 "strings" 9 ) 10 11 // Test-ability: isolate deleteCtl to build and return exec.Cmd from DeleteOpts 12 func (k Kubectl) deleteCtl(namespace, kind, name string, opts DeleteOpts) *exec.Cmd { 13 argv := []string{ 14 "-n", namespace, 15 kind, name, 16 } 17 if opts.Force { 18 argv = append(argv, "--force") 19 } 20 21 if opts.DryRun != "" { 22 dryRun := fmt.Sprintf("--dry-run=%s", opts.DryRun) 23 argv = append(argv, dryRun) 24 } 25 26 return k.ctl("delete", argv...) 27 } 28 29 // Delete deletes the given Kubernetes resource from the cluster 30 func (k Kubectl) Delete(namespace, kind, name string, opts DeleteOpts) error { 31 cmd := k.deleteCtl(namespace, kind, name, opts) 32 33 var stdout bytes.Buffer 34 var stderr bytes.Buffer 35 36 cmd.Stdout = &stdout 37 cmd.Stderr = &stderr 38 cmd.Stdin = os.Stdin 39 40 if err := cmd.Run(); err != nil { 41 if strings.Contains(stderr.String(), "Error from server (NotFound):") { 42 print("Delete failed: " + stderr.String()) 43 return nil 44 } 45 return err 46 } 47 if opts.DryRun != "" { 48 print(stdout.String()) 49 } 50 51 return nil 52 }