func (srv *Server) ContainerCreate(job *engine.Job) string { var name string if len(job.Args) == 1 { name = job.Args[0] } else if len(job.Args) > 1 { return fmt.Sprintf("Usage: %s ", job.Name) } var config Config if err := job.ExportEnv(&config); err != nil { return err.Error() } if config.Memory != 0 && config.Memory < 524288 { return "Minimum memory limit allowed is 512k" } if config.Memory > 0 && !srv.runtime.capabilities.MemoryLimit { config.Memory = 0 } if config.Memory > 0 && !srv.runtime.capabilities.SwapLimit { config.MemorySwap = -1 } container, buildWarnings, err := srv.runtime.Create(&config, name) if err != nil { if srv.runtime.graph.IsNotExist(err) { _, tag := utils.ParseRepositoryTag(config.Image) if tag == "" { tag = DEFAULTTAG } return fmt.Sprintf("No such image: %s (tag: %s)", config.Image, tag) } return err.Error() } srv.LogEvent("create", container.ID, srv.runtime.repositories.ImageName(container.Image)) // FIXME: this is necessary because runtime.Create might return a nil container // with a non-nil error. This should not happen! Once it's fixed we // can remove this workaround. if container != nil { job.Printf("%s\n", container.ID) } for _, warning := range buildWarnings { job.Errorf("%s\n", warning) } return "0" }
// Auth contacts the public registry with the provided credentials, // and returns OK if authentication was sucessful. // It can be used to verify the validity of a client's credentials. func (s *Service) Auth(job *engine.Job) engine.Status { var ( err error authConfig = &AuthConfig{} ) job.GetenvJson("authConfig", authConfig) // TODO: this is only done here because auth and registry need to be merged into one pkg if addr := authConfig.ServerAddress; addr != "" && addr != IndexServerAddress() { addr, err = ExpandAndVerifyRegistryUrl(addr) if err != nil { return job.Error(err) } authConfig.ServerAddress = addr } status, err := Login(authConfig, HTTPRequestFactory(nil)) if err != nil { return job.Error(err) } job.Printf("%s\n", status) return engine.StatusOK }
func (srv *Server) ContainerCreate(job *engine.Job) string { var name string if len(job.Args) == 1 { name = job.Args[0] } else if len(job.Args) > 1 { return fmt.Sprintf("Usage: %s ", job.Name) } var config Config if err := job.ExportEnv(&config); err != nil { return err.Error() } if config.Memory != 0 && config.Memory < 524288 { return "Minimum memory limit allowed is 512k" } if config.Memory > 0 && !srv.runtime.capabilities.MemoryLimit { config.Memory = 0 } if config.Memory > 0 && !srv.runtime.capabilities.SwapLimit { config.MemorySwap = -1 } container, buildWarnings, err := srv.runtime.Create(&config, name) if err != nil { if srv.runtime.graph.IsNotExist(err) { _, tag := utils.ParseRepositoryTag(config.Image) if tag == "" { tag = DEFAULTTAG } return fmt.Sprintf("No such image: %s (tag: %s)", config.Image, tag) } return err.Error() } srv.LogEvent("create", container.ID, srv.runtime.repositories.ImageName(container.Image)) job.Printf("%s\n", container.ID) for _, warning := range buildWarnings { job.Errorf("%s\n", warning) } return "0" }