Add an InvalidState varlink error for Init

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
This commit is contained in:
Matthew Heon
2019-05-02 11:37:59 -04:00
parent 0b2c9c2acc
commit 1e6413e3fd
4 changed files with 20 additions and 3 deletions

View File

@ -33,6 +33,8 @@ func outputError(err error) {
ne = errors.New(e.Reason) ne = errors.New(e.Reason)
case *iopodman.VolumeNotFound: case *iopodman.VolumeNotFound:
ne = errors.New(e.Reason) ne = errors.New(e.Reason)
case *iopodman.InvalidState:
ne = errors.New(e.Reason)
case *iopodman.ErrorOccurred: case *iopodman.ErrorOccurred:
ne = errors.New(e.Reason) ne = errors.New(e.Reason)
default: default:

View File

@ -1233,7 +1233,7 @@ error PodNotFound (name: string, reason: string)
# VolumeNotFound means the volume could not be found by the name or ID in local storage. # VolumeNotFound means the volume could not be found by the name or ID in local storage.
error VolumeNotFound (id: string, reason: string) error VolumeNotFound (id: string, reason: string)
# PodContainerError means a container associated with a pod failed to preform an operation. It contains # PodContainerError means a container associated with a pod failed to perform an operation. It contains
# a container ID of the container that failed. # a container ID of the container that failed.
error PodContainerError (podname: string, errors: []PodContainerErrorData) error PodContainerError (podname: string, errors: []PodContainerErrorData)
@ -1241,6 +1241,9 @@ error PodContainerError (podname: string, errors: []PodContainerErrorData)
# the pod ID. # the pod ID.
error NoContainersInPod (name: string) error NoContainersInPod (name: string)
# InvalidState indicates that a container or pod was in an improper state for the requested operation
error InvalidState (id: string, reason: string)
# ErrorOccurred is a generic error for an error that occurs during the execution. The actual error message # ErrorOccurred is a generic error for an error that occurs during the execution. The actual error message
# is includes as part of the error's text. # is includes as part of the error's text.
error ErrorOccurred (reason: string) error ErrorOccurred (reason: string)

View File

@ -251,7 +251,16 @@ func (r *LocalRuntime) InitContainers(ctx context.Context, cli *cliconfig.InitVa
for _, id := range ids { for _, id := range ids {
initialized, err := iopodman.InitContainer().Call(r.Conn, id) initialized, err := iopodman.InitContainer().Call(r.Conn, id)
if err != nil { if err != nil {
failures[id] = err if cli.All {
switch err.(type) {
case *iopodman.InvalidState:
ok = append(ok, initialized)
default:
failures[id] = err
}
} else {
failures[id] = err
}
} else { } else {
ok = append(ok, initialized) ok = append(ok, initialized)
} }

View File

@ -372,6 +372,9 @@ func (i *LibpodAPI) InitContainer(call iopodman.VarlinkCall, name string) error
return call.ReplyContainerNotFound(name, err.Error()) return call.ReplyContainerNotFound(name, err.Error())
} }
if err := ctr.Init(getContext()); err != nil { if err := ctr.Init(getContext()); err != nil {
if errors.Cause(err) == libpod.ErrCtrStateInvalid {
return call.ReplyInvalidState(ctr.ID(), err.Error())
}
return call.ReplyErrorOccurred(err.Error()) return call.ReplyErrorOccurred(err.Error())
} }
return call.ReplyInitContainer(ctr.ID()) return call.ReplyInitContainer(ctr.ID())