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  }