func validateVolumeMounts(mounts []api.VolumeMount, volumes util.StringSet) errs.ValidationErrorList { allErrs := errs.ValidationErrorList{} for i, mnt := range mounts { mErrs := errs.ValidationErrorList{} if len(mnt.Name) == 0 { mErrs = append(mErrs, errs.NewFieldRequired("name", mnt.Name)) } else if !volumes.Has(mnt.Name) { mErrs = append(mErrs, errs.NewFieldNotFound("name", mnt.Name)) } if len(mnt.MountPath) == 0 { mErrs = append(mErrs, errs.NewFieldRequired("mountPath", mnt.MountPath)) } allErrs = append(allErrs, mErrs.PrefixIndex(i)...) } return allErrs }
// Create registers a new image (if it doesn't exist) and updates the specified ImageRepository's tags. func (s *REST) Create(obj interface{}) (<-chan interface{}, error) { mapping, ok := obj.(*api.ImageRepositoryMapping) if !ok { return nil, fmt.Errorf("not an image repository mapping: %#v", obj) } repo, err := s.findImageRepository(mapping.DockerImageRepository) if err != nil { return nil, err } if repo == nil { return nil, errors.NewInvalid("imageRepositoryMapping", mapping.ID, errors.ErrorList{ errors.NewFieldNotFound("DockerImageRepository", mapping.DockerImageRepository), }) } if errs := validation.ValidateImageRepositoryMapping(mapping); len(errs) > 0 { return nil, errors.NewInvalid("imageRepositoryMapping", mapping.ID, errs) } image := mapping.Image image.CreationTimestamp = util.Now() //TODO apply metadata overrides if repo.Tags == nil { repo.Tags = make(map[string]string) } repo.Tags[mapping.Tag] = image.ID return apiserver.MakeAsync(func() (interface{}, error) { err = s.imageRegistry.CreateImage(&image) if err != nil && !errors.IsAlreadyExists(err) { return nil, err } err = s.imageRepositoryRegistry.UpdateImageRepository(repo) if err != nil { return nil, err } return &kubeapi.Status{Status: kubeapi.StatusSuccess}, nil }), nil }