github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/nodeagent/dep/package-manager-remove.go (about)

     1  package dep
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"os/exec"
     7  	"strings"
     8  )
     9  
    10  func (p *PackageManager) rembasedRemove(remove ...*Software) error {
    11  
    12  	if len(remove) == 0 {
    13  		return nil
    14  	}
    15  
    16  	swStrs := make([]string, len(remove))
    17  	for i, sw := range remove {
    18  		swStrs[i] = sw.Package
    19  		if sw.Version != "" {
    20  			swStrs[i] = fmt.Sprintf("%s-%s", sw.Package, sw.Version)
    21  		}
    22  	}
    23  
    24  	errBuf := new(bytes.Buffer)
    25  	defer errBuf.Reset()
    26  	outBuf := new(bytes.Buffer)
    27  	defer outBuf.Reset()
    28  
    29  	cmd := exec.Command("yum", append([]string{"--assumeyes", "remove"}, swStrs...)...)
    30  	cmd.Stderr = errBuf
    31  	cmd.Stdout = outBuf
    32  	err := cmd.Run()
    33  	errStr := errBuf.String()
    34  	outStr := outBuf.String()
    35  	p.monitor.WithFields(map[string]interface{}{
    36  		"command": fmt.Sprintf("'%s'", strings.Join(cmd.Args, "' '")),
    37  		"stdout":  outStr,
    38  		"stderr":  errStr,
    39  	}).Debug("Executed yum remove")
    40  	if err != nil {
    41  		return fmt.Errorf("removing yum packages [%s] failed with stderr %s: %w", strings.Join(swStrs, ", "), errStr, err)
    42  	}
    43  	return nil
    44  }