github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/cmd/podman/errors_remote.go (about)

     1  // +build remoteclient
     2  
     3  package main
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  	"os/exec"
     9  	"syscall"
    10  
    11  	"github.com/containers/libpod/libpod/define"
    12  	iopodman "github.com/containers/libpod/pkg/varlink"
    13  	"github.com/pkg/errors"
    14  	"github.com/sirupsen/logrus"
    15  )
    16  
    17  func outputError(err error) {
    18  	if MainGlobalOpts.LogLevel == "debug" {
    19  		logrus.Errorf(err.Error())
    20  	} else {
    21  		if ee, ok := err.(*exec.ExitError); ok {
    22  			if status, ok := ee.Sys().(syscall.WaitStatus); ok {
    23  				exitCode = status.ExitStatus()
    24  			}
    25  		}
    26  		var ne error
    27  		switch e := err.(type) {
    28  		// For some reason golang won't let me list them with commas so listing them all.
    29  		case *iopodman.ImageNotFound:
    30  			ne = errors.New(e.Reason)
    31  		case *iopodman.ContainerNotFound:
    32  			ne = errors.New(e.Reason)
    33  		case *iopodman.PodNotFound:
    34  			ne = errors.New(e.Reason)
    35  		case *iopodman.VolumeNotFound:
    36  			ne = errors.New(e.Reason)
    37  		case *iopodman.InvalidState:
    38  			ne = errors.New(e.Reason)
    39  		case *iopodman.ErrorOccurred:
    40  			ne = errors.New(e.Reason)
    41  		default:
    42  			ne = err
    43  		}
    44  		fmt.Fprintln(os.Stderr, "Error:", ne.Error())
    45  	}
    46  }
    47  
    48  func setExitCode(err error) int {
    49  	cause := errors.Cause(err)
    50  	switch e := cause.(type) {
    51  	// For some reason golang won't let me list them with commas so listing them all.
    52  	case *iopodman.ContainerNotFound:
    53  		return 1
    54  	case *iopodman.InvalidState:
    55  		return 2
    56  	default:
    57  		switch e {
    58  		case define.ErrNoSuchCtr:
    59  			return 1
    60  		case define.ErrCtrStateInvalid:
    61  			return 2
    62  		}
    63  	}
    64  	return exitCode
    65  }