// GetContainer looks for a container using the provided information, which could be // one of the following inputs from the caller: // - A full container ID, which will exact match a container in daemon's list // - A container name, which will only exact match via the GetByName() function // - A partial container ID prefix (e.g. short ID) of any length that is // unique enough to only return a single container object // If none of these searches succeed, an error is returned func (daemon *Daemon) GetContainer(prefixOrName string) (*container.Container, error) { if len(prefixOrName) == 0 { return nil, errors.NewBadRequestError(fmt.Errorf("No container name or ID supplied")) } if containerByID := daemon.containers.Get(prefixOrName); containerByID != nil { // prefix is an exact match to a full container ID return containerByID, nil } // GetByName will match only an exact name provided; we ignore errors if containerByName, _ := daemon.GetByName(prefixOrName); containerByName != nil { // prefix is an exact match to a full container Name return containerByName, nil } containerID, indexError := daemon.idIndex.Get(prefixOrName) if indexError != nil { // When truncindex defines an error type, use that instead if indexError == truncindex.ErrNotExist { err := fmt.Errorf("No such container: %s", prefixOrName) return nil, errors.NewRequestNotFoundError(err) } return nil, indexError } return daemon.containers.Get(containerID), nil }
func getTask(ctx context.Context, c swarmapi.ControlClient, input string) (*swarmapi.Task, error) { // GetTask to match via full ID. rg, err := c.GetTask(ctx, &swarmapi.GetTaskRequest{TaskID: input}) if err != nil { // If any error (including NotFound), ListTasks to match via full name. rl, err := c.ListTasks(ctx, &swarmapi.ListTasksRequest{Filters: &swarmapi.ListTasksRequest_Filters{Names: []string{input}}}) if err != nil || len(rl.Tasks) == 0 { // If any error or 0 result, ListTasks to match via ID prefix. rl, err = c.ListTasks(ctx, &swarmapi.ListTasksRequest{Filters: &swarmapi.ListTasksRequest_Filters{IDPrefixes: []string{input}}}) } if err != nil { return nil, err } if len(rl.Tasks) == 0 { err := fmt.Errorf("task %s not found", input) return nil, errors.NewRequestNotFoundError(err) } if l := len(rl.Tasks); l > 1 { return nil, fmt.Errorf("task %s is ambiguous (%d matches found)", input, l) } return rl.Tasks[0], nil } return rg.Task, nil }
func (d *Daemon) imageNotExistToErrcode(err error) error { if dne, isDNE := err.(ErrImageDoesNotExist); isDNE { if strings.Contains(dne.RefOrID, "@") { e := fmt.Errorf("No such image: %s", dne.RefOrID) return errors.NewRequestNotFoundError(e) } tag := reference.DefaultTag ref, err := reference.ParseNamed(dne.RefOrID) if err != nil { e := fmt.Errorf("No such image: %s:%s", dne.RefOrID, tag) return errors.NewRequestNotFoundError(e) } if tagged, isTagged := ref.(reference.NamedTagged); isTagged { tag = tagged.Tag() } e := fmt.Errorf("No such image: %s:%s", ref.Name(), tag) return errors.NewRequestNotFoundError(e) } return err }
func getSwarm(ctx context.Context, c swarmapi.ControlClient) (*swarmapi.Cluster, error) { rl, err := c.ListClusters(ctx, &swarmapi.ListClustersRequest{}) if err != nil { return nil, err } if len(rl.Clusters) == 0 { return nil, errors.NewRequestNotFoundError(errNoSwarm) } // TODO: assume one cluster only return rl.Clusters[0], nil }
// createMux initializes the main router the server uses. func (s *Server) createMux() *mux.Router { m := mux.NewRouter() logrus.Debug("Registering routers") for _, apiRouter := range s.routers { for _, r := range apiRouter.Routes() { f := s.makeHTTPHandler(r.Handler()) logrus.Debugf("Registering %s, %s", r.Method(), r.Path()) m.Path(versionMatcher + r.Path()).Methods(r.Method()).Handler(f) m.Path(r.Path()).Methods(r.Method()).Handler(f) } } err := errors.NewRequestNotFoundError(fmt.Errorf("page not found")) notFoundHandler := httputils.MakeErrorHandler(err) m.HandleFunc(versionMatcher+"/{path:.*}", notFoundHandler) m.NotFoundHandler = notFoundHandler return m }
func errExecNotFound(id string) error { err := fmt.Errorf("No such exec instance '%s' found in daemon", id) return errors.NewRequestNotFoundError(err) }