// NewImageStreamTagEvaluator computes resource usage of ImageStreamsTags. Its sole purpose is to handle // UPDATE admission operations on imageStreamTags resource. func NewImageStreamTagEvaluator(osClient osclient.Interface) kquota.Evaluator { computeResources := []kapi.ResourceName{ imageapi.ResourceImages, } matchesScopeFunc := func(kapi.ResourceQuotaScope, runtime.Object) bool { return true } getFuncByNamespace := func(namespace, id string) (runtime.Object, error) { nameParts := strings.SplitN(id, ":", 2) if len(nameParts) != 2 { return nil, fmt.Errorf("%q is an invalid id for an imagestreamtag. Must be in form <name>:<tag>.", id) } obj, err := osClient.ImageStreamTags(namespace).Get(nameParts[0], nameParts[1]) if err != nil { if !kerrors.IsNotFound(err) { return nil, err } obj = &imageapi.ImageStreamTag{ ObjectMeta: kapi.ObjectMeta{ Namespace: namespace, Name: id, }, } } return obj, nil } return quotautil.NewSharedContextEvaluator( imageStreamTagEvaluatorName, kapi.Kind("ImageStreamTag"), map[admission.Operation][]kapi.ResourceName{admission.Update: computeResources}, computeResources, matchesScopeFunc, getFuncByNamespace, nil, imageStreamTagConstraintsFunc, makeImageStreamTagUsageComputerFactory(osClient)) }