func (r *replenishmentControllerFactory) NewController(options *kresourcequota.ReplenishmentControllerOptions) (*framework.Controller, error) { var result *framework.Controller switch options.GroupKind { case imageapi.Kind("ImageStream"): _, result = framework.NewInformer( &cache.ListWatch{ ListFunc: func(options api.ListOptions) (runtime.Object, error) { return r.osClient.ImageStreams(api.NamespaceAll).List(options) }, WatchFunc: func(options api.ListOptions) (watch.Interface, error) { return r.osClient.ImageStreams(api.NamespaceAll).Watch(options) }, }, &imageapi.ImageStream{}, options.ResyncPeriod(), framework.ResourceEventHandlerFuncs{ UpdateFunc: ImageStreamReplenishmentUpdateFunc(options), DeleteFunc: kresourcequota.ObjectReplenishmentDeleteFunc(options), }, ) default: return nil, fmt.Errorf("no replenishment controller available for %s", options.GroupKind) } return result, nil }
// ImageStreamReplenishmentUpdateFunc will replenish if the old image stream was quota tracked but the new is not func ImageStreamReplenishmentUpdateFunc(options *kresourcequota.ReplenishmentControllerOptions) func(oldObj, newObj interface{}) { return func(oldObj, newObj interface{}) { oldIS := oldObj.(*imageapi.ImageStream) newIS := newObj.(*imageapi.ImageStream) if !reflect.DeepEqual(oldIS.Status.Tags, newIS.Status.Tags) { options.ReplenishmentFunc(options.GroupKind, newIS.Namespace, newIS) } } }