func (handler *ContainersHandlersImpl) GetStateHandler(params containers.GetStateParams) middleware.Responder { defer trace.End(trace.Begin(fmt.Sprintf("handle(%s)", params.Handle))) // NOTE: I've no idea why GetStateHandler takes a handle instead of an ID - hopefully there was a reason for an inspection // operation to take this path h := exec.GetHandle(params.Handle) if h == nil || h.ExecConfig == nil { return containers.NewGetStateNotFound() } container := exec.Containers.Container(h.ExecConfig.ID) if container == nil { return containers.NewGetStateNotFound() } var state string switch container.CurrentState() { case exec.StateRunning: state = "RUNNING" case exec.StateStopped: state = "STOPPED" case exec.StateCreated: state = "CREATED" default: return containers.NewGetStateDefault(http.StatusServiceUnavailable) } return containers.NewGetStateOK().WithPayload(&models.ContainerGetStateResponse{Handle: h.String(), State: state}) }
func (handler *ContainersHandlersImpl) RemoveContainerHandler(params containers.ContainerRemoveParams) middleware.Responder { defer trace.End(trace.Begin(params.ID)) // get the indicated container for removal cID := uid.Parse(params.ID) h := exec.GetContainer(context.Background(), cID) if h == nil || h.ExecConfig == nil { return containers.NewContainerRemoveNotFound() } container := exec.Containers.Container(h.ExecConfig.ID) if container == nil { return containers.NewGetStateNotFound() } // NOTE: this should allowing batching of operations, as with Create, Start, Stop, et al err := container.Remove(context.Background(), handler.handlerCtx.Session) if err != nil { switch err := err.(type) { case exec.NotFoundError: return containers.NewContainerRemoveNotFound() case exec.RemovePowerError: return containers.NewContainerRemoveConflict().WithPayload(&models.Error{Message: err.Error()}) default: return containers.NewContainerRemoveInternalServerError() } } return containers.NewContainerRemoveOK() }