66 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
| // +build remoteclient
 | |
| 
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"os/exec"
 | |
| 	"syscall"
 | |
| 
 | |
| 	"github.com/containers/libpod/cmd/podman/varlink"
 | |
| 	"github.com/containers/libpod/libpod/define"
 | |
| 	"github.com/pkg/errors"
 | |
| 	"github.com/sirupsen/logrus"
 | |
| )
 | |
| 
 | |
| func outputError(err error) {
 | |
| 	if MainGlobalOpts.LogLevel == "debug" {
 | |
| 		logrus.Errorf(err.Error())
 | |
| 	} else {
 | |
| 		if ee, ok := err.(*exec.ExitError); ok {
 | |
| 			if status, ok := ee.Sys().(syscall.WaitStatus); ok {
 | |
| 				exitCode = status.ExitStatus()
 | |
| 			}
 | |
| 		}
 | |
| 		var ne error
 | |
| 		switch e := err.(type) {
 | |
| 		// For some reason golang wont let me list them with commas so listing them all.
 | |
| 		case *iopodman.ImageNotFound:
 | |
| 			ne = errors.New(e.Reason)
 | |
| 		case *iopodman.ContainerNotFound:
 | |
| 			ne = errors.New(e.Reason)
 | |
| 		case *iopodman.PodNotFound:
 | |
| 			ne = errors.New(e.Reason)
 | |
| 		case *iopodman.VolumeNotFound:
 | |
| 			ne = errors.New(e.Reason)
 | |
| 		case *iopodman.InvalidState:
 | |
| 			ne = errors.New(e.Reason)
 | |
| 		case *iopodman.ErrorOccurred:
 | |
| 			ne = errors.New(e.Reason)
 | |
| 		default:
 | |
| 			ne = err
 | |
| 		}
 | |
| 		fmt.Fprintln(os.Stderr, "Error:", ne.Error())
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func setExitCode(err error) int {
 | |
| 	cause := errors.Cause(err)
 | |
| 	switch e := cause.(type) {
 | |
| 	// For some reason golang wont let me list them with commas so listing them all.
 | |
| 	case *iopodman.ContainerNotFound:
 | |
| 		return 1
 | |
| 	case *iopodman.InvalidState:
 | |
| 		return 2
 | |
| 	default:
 | |
| 		switch e {
 | |
| 		case define.ErrNoSuchCtr:
 | |
| 			return 1
 | |
| 		case define.ErrCtrStateInvalid:
 | |
| 			return 2
 | |
| 		}
 | |
| 	}
 | |
| 	return exitCode
 | |
| }
 |