// Get retrieves the APIService from the index for a given name. func (s *aPIServiceLister) Get(name string) (*apiregistration.APIService, error) { key := &apiregistration.APIService{ObjectMeta: api.ObjectMeta{Name: name}} obj, exists, err := s.indexer.Get(key) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(apiregistration.Resource("apiservice"), name) } return obj.(*apiregistration.APIService), nil }
// NewREST returns a RESTStorage object that will work against network policies. func NewREST(opts generic.RESTOptions) *REST { prefix := "/" + opts.ResourcePrefix newListFunc := func() runtime.Object { return &apiregistration.APIServiceList{} } storageInterface, dFunc := opts.Decorator( opts.StorageConfig, 1000, // cache size &apiregistration.APIService{}, prefix, strategy, newListFunc, getAttrs, storage.NoTriggerPublisher, ) store := ®istry.Store{ NewFunc: func() runtime.Object { return &apiregistration.APIService{} }, // NewListFunc returns an object capable of storing results of an etcd list. NewListFunc: newListFunc, // Produces a APIService that etcd understands, to the root of the resource // by combining the namespace in the context with the given prefix KeyRootFunc: func(ctx api.Context) string { return prefix }, // Produces a APIService that etcd understands, to the resource by combining // the namespace in the context with the given prefix KeyFunc: func(ctx api.Context, name string) (string, error) { return registry.NoNamespaceKeyFunc(ctx, prefix, name) }, // Retrieve the name field of an apiserver ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*apiregistration.APIService).Name, nil }, // Used to match objects based on labels/fields for list and watch PredicateFunc: MatchAPIService, QualifiedResource: apiregistration.Resource("apiservers"), EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate controller creation CreateStrategy: strategy, // Used to validate controller updates UpdateStrategy: strategy, DeleteStrategy: strategy, Storage: storageInterface, DestroyFunc: dFunc, } return &REST{store} }
// NewREST returns a RESTStorage object that will work against API services. func NewREST(optsGetter generic.RESTOptionsGetter) *REST { store := &genericregistry.Store{ NewFunc: func() runtime.Object { return &apiregistration.APIService{} }, NewListFunc: func() runtime.Object { return &apiregistration.APIServiceList{} }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*apiregistration.APIService).Name, nil }, PredicateFunc: apiservice.MatchAPIService, QualifiedResource: apiregistration.Resource("apiservices"), CreateStrategy: apiservice.Strategy, UpdateStrategy: apiservice.Strategy, DeleteStrategy: apiservice.Strategy, } options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: apiservice.GetAttrs} if err := store.CompleteWithOptions(options); err != nil { panic(err) // TODO: Propagate error up } return &REST{store} }
// New returns a new instance of APIDiscoveryServer from the given config. func (c completedConfig) New() (*APIDiscoveryServer, error) { genericServer, err := c.Config.GenericConfig.SkipComplete().New() // completion is done in Complete, no need for a second time if err != nil { return nil, err } s := &APIDiscoveryServer{ GenericAPIServer: genericServer, } apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName) apiGroupInfo.GroupMeta.GroupVersion = v1alpha1.SchemeGroupVersion v1alpha1storage := map[string]rest.Storage{} v1alpha1storage["apiservices"] = apiservicestorage.NewREST(c.RESTOptionsGetter.NewFor(apiregistration.Resource("apiservices"))) apiGroupInfo.VersionedResourcesStorageMap["v1alpha1"] = v1alpha1storage if err := s.GenericAPIServer.InstallAPIGroup(&apiGroupInfo); err != nil { return nil, err } return s, nil }