func (r *ScaleREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { rc, err := (*r.registry).GetController(ctx, name) if err != nil { return nil, false, errors.NewNotFound(extensions.Resource("replicationcontrollers/scale"), name) } oldScale := scaleFromRC(rc) obj, err := objInfo.UpdatedObject(ctx, oldScale) if obj == nil { return nil, false, errors.NewBadRequest(fmt.Sprintf("nil update passed to Scale")) } scale, ok := obj.(*extensions.Scale) if !ok { return nil, false, errors.NewBadRequest(fmt.Sprintf("wrong object passed to Scale update: %v", obj)) } if errs := extvalidation.ValidateScale(scale); len(errs) > 0 { return nil, false, errors.NewInvalid(extensions.Kind("Scale"), scale.Name, errs) } rc.Spec.Replicas = scale.Spec.Replicas rc.ResourceVersion = scale.ResourceVersion rc, err = (*r.registry).UpdateController(ctx, rc) if err != nil { return nil, false, errors.NewConflict(extensions.Resource("replicationcontrollers/scale"), scale.Name, err) } return scaleFromRC(rc), false, nil }
func installExtensionsAPIs(g *genericapiserver.GenericAPIServer, restOptionsFactory restOptionsFactory) { replicaSetStorage := replicasetetcd.NewStorage(restOptionsFactory.NewFor(extensions.Resource("replicasets"))) deploymentStorage := deploymentetcd.NewStorage(restOptionsFactory.NewFor(extensions.Resource("deployments"))) ingressStorage, ingressStatusStorage := ingressetcd.NewREST(restOptionsFactory.NewFor(extensions.Resource("ingresses"))) daemonSetStorage, daemonSetStatusStorage := daemonsetetcd.NewREST(restOptionsFactory.NewFor(extensions.Resource("daemonsets"))) extensionsResources := map[string]rest.Storage{ "replicasets": replicaSetStorage.ReplicaSet, "replicasets/status": replicaSetStorage.Status, "replicasets/scale": replicaSetStorage.Scale, "ingresses": ingressStorage, "ingresses/status": ingressStatusStorage, "daemonsets": daemonSetStorage, "daemonsets/status": daemonSetStatusStorage, "deployments": deploymentStorage.Deployment, "deployments/status": deploymentStorage.Status, "deployments/scale": deploymentStorage.Scale, "deployments/rollback": deploymentStorage.Rollback, } extensionsGroupMeta := registered.GroupOrDie(extensions.GroupName) apiGroupInfo := genericapiserver.APIGroupInfo{ GroupMeta: *extensionsGroupMeta, VersionedResourcesStorageMap: map[string]map[string]rest.Storage{ "v1beta1": extensionsResources, }, OptionsExternalVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion, Scheme: api.Scheme, ParameterCodec: api.ParameterCodec, NegotiatedSerializer: api.Codecs, } if err := g.InstallAPIGroup(&apiGroupInfo); err != nil { glog.Fatalf("Error in registering group versions: %v", err) } }
// Ensure that when a deploymentRollback is created for a deployment that has already been deleted // by the API server, API server returns not-found error. func TestEtcdCreateDeploymentRollbackNoDeployment(t *testing.T) { storage, server := newStorage(t) defer server.Terminate(t) defer storage.Deployment.Store.DestroyFunc() rollbackStorage := storage.Rollback ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) _, err := rollbackStorage.Create(ctx, &extensions.DeploymentRollback{ Name: name, UpdatedAnnotations: map[string]string{}, RollbackTo: extensions.RollbackConfig{Revision: 1}, }) if err == nil { t.Fatalf("Expected not-found-error but got nothing") } if !errors.IsNotFound(storeerr.InterpretGetError(err, extensions.Resource("deployments"), name)) { t.Fatalf("Unexpected error returned: %#v", err) } _, err = storage.Deployment.Get(ctx, name, &metav1.GetOptions{}) if err == nil { t.Fatalf("Expected not-found-error but got nothing") } if !errors.IsNotFound(storeerr.InterpretGetError(err, extensions.Resource("deployments"), name)) { t.Fatalf("Unexpected error: %v", err) } }
// Ensure that when a deploymentRollback is created for a deployment that has already been deleted // by the API server, API server returns not-found error. func TestEtcdCreateDeploymentRollbackNoDeployment(t *testing.T) { storage, server := newStorage(t) defer server.Terminate(t) rollbackStorage := storage.Rollback ctx := api.WithNamespace(api.NewContext(), namespace) key, _ := storage.Deployment.KeyFunc(ctx, name) key = etcdtest.AddPrefix(key) _, err := rollbackStorage.Create(ctx, &extensions.DeploymentRollback{ Name: name, UpdatedAnnotations: map[string]string{}, RollbackTo: extensions.RollbackConfig{Revision: 1}, }) if err == nil { t.Fatalf("Expected not-found-error but got nothing") } if !errors.IsNotFound(etcderrors.InterpretGetError(err, extensions.Resource("deployments"), name)) { t.Fatalf("Unexpected error returned: %#v", err) } _, err = storage.Deployment.Get(ctx, name) if err == nil { t.Fatalf("Expected not-found-error but got nothing") } if !errors.IsNotFound(etcderrors.InterpretGetError(err, extensions.Resource("deployments"), name)) { t.Fatalf("Unexpected error: %v", err) } }
func (r *RollbackREST) rollbackDeployment(ctx api.Context, deploymentID string, config *extensions.RollbackConfig, annotations map[string]string) (err error) { if _, err = r.setDeploymentRollback(ctx, deploymentID, config, annotations); err != nil { err = etcderr.InterpretGetError(err, extensions.Resource("deployments"), deploymentID) err = etcderr.InterpretUpdateError(err, extensions.Resource("deployments"), deploymentID) if _, ok := err.(*errors.StatusError); !ok { err = errors.NewConflict(extensions.Resource("deployments/rollback"), deploymentID, err) } } return }
func (r *RollbackREST) rollbackDeployment(ctx api.Context, deploymentID string, config *extensions.RollbackConfig, annotations map[string]string) error { if _, err := r.setDeploymentRollback(ctx, deploymentID, config, annotations); err != nil { err = storeerr.InterpretGetError(err, extensions.Resource("deployments"), deploymentID) err = storeerr.InterpretUpdateError(err, extensions.Resource("deployments"), deploymentID) if _, ok := err.(*errors.StatusError); !ok { err = errors.NewInternalError(err) } return err } return nil }
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter genericapiserver.RESTOptionsGetter) map[string]rest.Storage { version := extensionsapiv1beta1.SchemeGroupVersion storage := map[string]rest.Storage{} if apiResourceConfigSource.ResourceEnabled(version.WithResource("horizontalpodautoscalers")) { hpaStorage, hpaStatusStorage := horizontalpodautoscaleretcd.NewREST(restOptionsGetter(extensions.Resource("horizontalpodautoscalers"))) storage["horizontalpodautoscalers"] = hpaStorage storage["horizontalpodautoscalers/status"] = hpaStatusStorage controllerStorage := expcontrolleretcd.NewStorage(restOptionsGetter(api.Resource("replicationControllers"))) storage["replicationcontrollers"] = controllerStorage.ReplicationController storage["replicationcontrollers/scale"] = controllerStorage.Scale } if apiResourceConfigSource.ResourceEnabled(version.WithResource("thirdpartyresources")) { thirdPartyResourceStorage := thirdpartyresourceetcd.NewREST(restOptionsGetter(extensions.Resource("thirdpartyresources"))) storage["thirdpartyresources"] = thirdPartyResourceStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("daemonsets")) { daemonSetStorage, daemonSetStatusStorage := daemonetcd.NewREST(restOptionsGetter(extensions.Resource("daemonsets"))) storage["daemonsets"] = daemonSetStorage storage["daemonsets/status"] = daemonSetStatusStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("deployments")) { deploymentStorage := deploymentetcd.NewStorage(restOptionsGetter(extensions.Resource("deployments"))) storage["deployments"] = deploymentStorage.Deployment storage["deployments/status"] = deploymentStorage.Status storage["deployments/rollback"] = deploymentStorage.Rollback storage["deployments/scale"] = deploymentStorage.Scale } if apiResourceConfigSource.ResourceEnabled(version.WithResource("jobs")) { jobsStorage, jobsStatusStorage := jobetcd.NewREST(restOptionsGetter(extensions.Resource("jobs"))) storage["jobs"] = jobsStorage storage["jobs/status"] = jobsStatusStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("ingresses")) { ingressStorage, ingressStatusStorage := ingressetcd.NewREST(restOptionsGetter(extensions.Resource("ingresses"))) storage["ingresses"] = ingressStorage storage["ingresses/status"] = ingressStatusStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("podsecuritypolicy")) { podSecurityExtensionsStorage := pspetcd.NewREST(restOptionsGetter(extensions.Resource("podsecuritypolicy"))) storage["podSecurityPolicies"] = podSecurityExtensionsStorage } if apiResourceConfigSource.ResourceEnabled(version.WithResource("replicasets")) { replicaSetStorage := replicasetetcd.NewStorage(restOptionsGetter(extensions.Resource("replicasets"))) storage["replicasets"] = replicaSetStorage.ReplicaSet storage["replicasets/status"] = replicaSetStorage.Status storage["replicasets/scale"] = replicaSetStorage.Scale } if apiResourceConfigSource.ResourceEnabled(version.WithResource("networkpolicies")) { networkExtensionsStorage := networkpolicyetcd.NewREST(restOptionsGetter(extensions.Resource("networkpolicies"))) storage["networkpolicies"] = networkExtensionsStorage } return storage }
// NewREST returns a registry which will store ThirdPartyResource in the given helper func NewREST(optsGetter generic.RESTOptionsGetter) *REST { resource := extensions.Resource("thirdpartyresources") opts, err := optsGetter.GetRESTOptions(resource) if err != nil { panic(err) // TODO: Propagate error up } // We explicitly do NOT do any decoration here yet. // TODO determine why we do not want to cache here opts.Decorator = generic.UndecoratedStorage // TODO use watchCacheSize=-1 to signal UndecoratedStorage store := &genericregistry.Store{ NewFunc: func() runtime.Object { return &extensions.ThirdPartyResource{} }, NewListFunc: func() runtime.Object { return &extensions.ThirdPartyResourceList{} }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.ThirdPartyResource).Name, nil }, PredicateFunc: thirdpartyresource.Matcher, QualifiedResource: resource, CreateStrategy: thirdpartyresource.Strategy, UpdateStrategy: thirdpartyresource.Strategy, DeleteStrategy: thirdpartyresource.Strategy, } options := &generic.StoreOptions{RESTOptions: opts, AttrFunc: thirdpartyresource.GetAttrs} // Pass in opts to use UndecoratedStorage if err := store.CompleteWithOptions(options); err != nil { panic(err) // TODO: Propagate error up } return &REST{store} }
func (r *ScaleREST) Update(ctx api.Context, obj runtime.Object) (runtime.Object, bool, error) { if obj == nil { return nil, false, errors.NewBadRequest(fmt.Sprintf("nil update passed to Scale")) } scale, ok := obj.(*extensions.Scale) if !ok { return nil, false, errors.NewBadRequest(fmt.Sprintf("expected input object type to be Scale, but %T", obj)) } if errs := extvalidation.ValidateScale(scale); len(errs) > 0 { return nil, false, errors.NewInvalid(extensions.Kind("Scale"), scale.Name, errs) } deployment, err := r.registry.GetDeployment(ctx, scale.Name) if err != nil { return nil, false, errors.NewNotFound(extensions.Resource("deployments/scale"), scale.Name) } deployment.Spec.Replicas = scale.Spec.Replicas deployment.ResourceVersion = scale.ResourceVersion deployment, err = r.registry.UpdateDeployment(ctx, deployment) if err != nil { return nil, false, err } newScale, err := scaleFromDeployment(deployment) if err != nil { return nil, false, errors.NewBadRequest(fmt.Sprintf("%v", err)) } return newScale, false, nil }
// Update scales the DeploymentConfig for the given Scale subresource, returning the updated Scale. func (r *ScaleREST) Update(ctx kapi.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { deploymentConfig, err := r.registry.GetDeploymentConfig(ctx, name) if err != nil { return nil, false, errors.NewNotFound(extensions.Resource("scale"), name) } old := api.ScaleFromConfig(deploymentConfig) obj, err := objInfo.UpdatedObject(ctx, old) if err != nil { return nil, false, err } scale, ok := obj.(*extensions.Scale) if !ok { return nil, false, errors.NewBadRequest(fmt.Sprintf("wrong object passed to Scale update: %v", obj)) } if errs := extvalidation.ValidateScale(scale); len(errs) > 0 { return nil, false, errors.NewInvalid(extensions.Kind("Scale"), scale.Name, errs) } deploymentConfig.Spec.Replicas = scale.Spec.Replicas if err := r.registry.UpdateDeploymentConfig(ctx, deploymentConfig); err != nil { return nil, false, err } return scale, false, nil }
// NewREST returns a registry which will store ThirdPartyResource in the given helper func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { prefix := "/thirdpartyresources" // We explicitly do NOT do any decoration here yet. storageInterface := s store := &etcdgeneric.Etcd{ NewFunc: func() runtime.Object { return &extensions.ThirdPartyResource{} }, NewListFunc: func() runtime.Object { return &extensions.ThirdPartyResourceList{} }, KeyRootFunc: func(ctx api.Context) string { return etcdgeneric.NamespaceKeyRootFunc(ctx, prefix) }, KeyFunc: func(ctx api.Context, id string) (string, error) { return etcdgeneric.NamespaceKeyFunc(ctx, prefix, id) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.ThirdPartyResource).Name, nil }, PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return thirdpartyresource.Matcher(label, field) }, QualifiedResource: extensions.Resource("thirdpartyresources"), CreateStrategy: thirdpartyresource.Strategy, UpdateStrategy: thirdpartyresource.Strategy, Storage: storageInterface, } return &REST{store} }
// NewREST returns a RESTStorage object that will work against PodSecurityPolicy objects. func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { newListFunc := func() runtime.Object { return &extensions.PodSecurityPolicyList{} } storageInterface := storageDecorator( s, 100, &extensions.PodSecurityPolicy{}, Prefix, podsecuritypolicy.Strategy, newListFunc) store := &etcdgeneric.Etcd{ NewFunc: func() runtime.Object { return &extensions.PodSecurityPolicy{} }, NewListFunc: newListFunc, KeyRootFunc: func(ctx api.Context) string { return Prefix }, KeyFunc: func(ctx api.Context, name string) (string, error) { return etcdgeneric.NoNamespaceKeyFunc(ctx, Prefix, name) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.PodSecurityPolicy).Name, nil }, PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return podsecuritypolicy.MatchPodSecurityPolicy(label, field) }, QualifiedResource: extensions.Resource("podsecuritypolicies"), CreateStrategy: podsecuritypolicy.Strategy, UpdateStrategy: podsecuritypolicy.Strategy, ReturnDeletedObject: true, Storage: storageInterface, } return &REST{store} }
// NewREST returns a registry which will store ThirdPartyResourceData in the given helper func NewREST(optsGetter generic.RESTOptionsGetter, group, kind string) *REST { resource := extensions.Resource("thirdpartyresourcedatas") opts, err := optsGetter.GetRESTOptions(resource) if err != nil { panic(err) // TODO: Propagate error up } // We explicitly do NOT do any decoration here yet. opts.Decorator = generic.UndecoratedStorage // TODO use watchCacheSize=-1 to signal UndecoratedStorage opts.ResourcePrefix = "/ThirdPartyResourceData/" + group + "/" + strings.ToLower(kind) + "s" store := &genericregistry.Store{ NewFunc: func() runtime.Object { return &extensions.ThirdPartyResourceData{} }, NewListFunc: func() runtime.Object { return &extensions.ThirdPartyResourceDataList{} }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.ThirdPartyResourceData).Name, nil }, PredicateFunc: thirdpartyresourcedata.Matcher, QualifiedResource: resource, CreateStrategy: thirdpartyresourcedata.Strategy, UpdateStrategy: thirdpartyresourcedata.Strategy, DeleteStrategy: thirdpartyresourcedata.Strategy, } options := &generic.StoreOptions{RESTOptions: opts, AttrFunc: thirdpartyresourcedata.GetAttrs} // Pass in opts to use UndecoratedStorage and custom ResourcePrefix if err := store.CompleteWithOptions(options); err != nil { panic(err) // TODO: Propagate error up } return &REST{ Store: store, kind: kind, } }
func installExtensionsAPIs(s *options.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) { replicaSetStorage := replicasetetcd.NewStorage(createRESTOptionsOrDie(s, g, f, extensions.Resource("replicasets"))) ingressStorage, ingressStatusStorage := ingressetcd.NewREST(createRESTOptionsOrDie(s, g, f, extensions.Resource("ingresses"))) extensionsResources := map[string]rest.Storage{ "replicasets": replicaSetStorage.ReplicaSet, "replicasets/status": replicaSetStorage.Status, "replicasets/scale": replicaSetStorage.Scale, "ingresses": ingressStorage, "ingresses/status": ingressStatusStorage, } extensionsGroupMeta := registered.GroupOrDie(extensions.GroupName) apiGroupInfo := genericapiserver.APIGroupInfo{ GroupMeta: *extensionsGroupMeta, VersionedResourcesStorageMap: map[string]map[string]rest.Storage{ "v1beta1": extensionsResources, }, OptionsExternalVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion, Scheme: api.Scheme, ParameterCodec: api.ParameterCodec, NegotiatedSerializer: api.Codecs, } if err := g.InstallAPIGroup(&apiGroupInfo); err != nil { glog.Fatalf("Error in registering group versions: %v", err) } }
// NewREST returns a registry which will store ThirdPartyResourceData in the given helper func NewREST(opts generic.RESTOptions, group, kind string) *REST { prefix := "/ThirdPartyResourceData/" + group + "/" + strings.ToLower(kind) + "s" // We explicitly do NOT do any decoration here yet. storageInterface, dFunc := generic.NewRawStorage(opts.StorageConfig) store := &genericregistry.Store{ NewFunc: func() runtime.Object { return &extensions.ThirdPartyResourceData{} }, NewListFunc: func() runtime.Object { return &extensions.ThirdPartyResourceDataList{} }, KeyRootFunc: func(ctx api.Context) string { return genericregistry.NamespaceKeyRootFunc(ctx, prefix) }, KeyFunc: func(ctx api.Context, id string) (string, error) { return genericregistry.NamespaceKeyFunc(ctx, prefix, id) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.ThirdPartyResourceData).Name, nil }, PredicateFunc: thirdpartyresourcedata.Matcher, QualifiedResource: extensions.Resource("thirdpartyresourcedatas"), EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: thirdpartyresourcedata.Strategy, UpdateStrategy: thirdpartyresourcedata.Strategy, DeleteStrategy: thirdpartyresourcedata.Strategy, Storage: storageInterface, DestroyFunc: dFunc, } return &REST{ Store: store, kind: kind, } }
// NewREST returns a registry which will store ThirdPartyResource in the given helper func NewREST(opts generic.RESTOptions) *REST { prefix := "/" + opts.ResourcePrefix // We explicitly do NOT do any decoration here yet. storageInterface, dFunc := generic.NewRawStorage(opts.StorageConfig) store := ®istry.Store{ NewFunc: func() runtime.Object { return &extensions.ThirdPartyResource{} }, NewListFunc: func() runtime.Object { return &extensions.ThirdPartyResourceList{} }, KeyRootFunc: func(ctx api.Context) string { return prefix }, KeyFunc: func(ctx api.Context, id string) (string, error) { return registry.NoNamespaceKeyFunc(ctx, prefix, id) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.ThirdPartyResource).Name, nil }, PredicateFunc: thirdpartyresource.Matcher, QualifiedResource: extensions.Resource("thirdpartyresources"), EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: thirdpartyresource.Strategy, UpdateStrategy: thirdpartyresource.Strategy, DeleteStrategy: thirdpartyresource.Strategy, Storage: storageInterface, DestroyFunc: dFunc, } return &REST{store} }
// NewREST returns a RESTStorage object that will work against PodSecurityPolicy objects. func NewREST(opts generic.RESTOptions) *REST { newListFunc := func() runtime.Object { return &extensions.PodSecurityPolicyList{} } storageInterface := opts.Decorator( opts.Storage, 100, &extensions.PodSecurityPolicy{}, Prefix, podsecuritypolicy.Strategy, newListFunc) store := ®istry.Store{ NewFunc: func() runtime.Object { return &extensions.PodSecurityPolicy{} }, NewListFunc: newListFunc, KeyRootFunc: func(ctx api.Context) string { return Prefix }, KeyFunc: func(ctx api.Context, name string) (string, error) { return registry.NoNamespaceKeyFunc(ctx, Prefix, name) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.PodSecurityPolicy).Name, nil }, PredicateFunc: podsecuritypolicy.MatchPodSecurityPolicy, QualifiedResource: extensions.Resource("podsecuritypolicies"), DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: podsecuritypolicy.Strategy, UpdateStrategy: podsecuritypolicy.Strategy, DeleteStrategy: podsecuritypolicy.Strategy, ReturnDeletedObject: true, Storage: storageInterface, } return &REST{store} }
func (r *ScaleREST) Update(ctx api.Context, obj runtime.Object) (runtime.Object, bool, error) { if obj == nil { return nil, false, errors.NewBadRequest(fmt.Sprintf("nil update passed to Scale")) } scale, ok := obj.(*extensions.Scale) if !ok { return nil, false, errors.NewBadRequest(fmt.Sprintf("wrong object passed to Scale update: %v", obj)) } if errs := extvalidation.ValidateScale(scale); len(errs) > 0 { return nil, false, errors.NewInvalid(extensions.Kind("Scale"), scale.Name, errs) } rs, err := r.registry.GetReplicaSet(ctx, scale.Name) if err != nil { return nil, false, errors.NewNotFound(extensions.Resource("replicasets/scale"), scale.Name) } rs.Spec.Replicas = scale.Spec.Replicas rs.ResourceVersion = scale.ResourceVersion rs, err = r.registry.UpdateReplicaSet(ctx, rs) if err != nil { return nil, false, err } newScale, err := scaleFromReplicaSet(rs) if err != nil { return nil, false, errors.NewBadRequest(fmt.Sprintf("%v", err)) } return newScale, false, err }
func (r *ScaleREST) Get(ctx api.Context, name string) (runtime.Object, error) { deployment, err := (*r.registry).GetDeployment(ctx, name) if err != nil { return nil, errors.NewNotFound(extensions.Resource("deployments/scale"), name) } return extensions.ScaleFromDeployment(deployment), nil }
// NewREST returns a registry which will store ThirdPartyResourceData in the given helper func NewREST(opts generic.RESTOptions, group, kind string) *REST { prefix := "/ThirdPartyResourceData/" + group + "/" + strings.ToLower(kind) + "s" // We explicitly do NOT do any decoration here yet. storageInterface := opts.Storage store := &etcdgeneric.Etcd{ NewFunc: func() runtime.Object { return &extensions.ThirdPartyResourceData{} }, NewListFunc: func() runtime.Object { return &extensions.ThirdPartyResourceDataList{} }, KeyRootFunc: func(ctx api.Context) string { return etcdgeneric.NamespaceKeyRootFunc(ctx, prefix) }, KeyFunc: func(ctx api.Context, id string) (string, error) { return etcdgeneric.NamespaceKeyFunc(ctx, prefix, id) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.ThirdPartyResourceData).Name, nil }, PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return thirdpartyresourcedata.Matcher(label, field) }, QualifiedResource: extensions.Resource("thirdpartyresourcedatas"), DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: thirdpartyresourcedata.Strategy, UpdateStrategy: thirdpartyresourcedata.Strategy, DeleteStrategy: thirdpartyresourcedata.Strategy, Storage: storageInterface, } return &REST{ Etcd: store, kind: kind, } }
func (r *ScaleREST) Get(ctx api.Context, name string) (runtime.Object, error) { rc, err := (*r.registry).GetController(ctx, name) if err != nil { return nil, errors.NewNotFound(extensions.Resource("replicationcontrollers/scale"), name) } return scaleFromRC(rc), nil }
func (s storeReplicaSetsNamespacer) Get(name string) (*extensions.ReplicaSet, error) { obj, exists, err := s.store.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(extensions.Resource("replicaset"), name) } return obj.(*extensions.ReplicaSet), nil }
// Get retrieves the Scale from the indexer for a given namespace and name. func (s scaleNamespaceLister) Get(name string) (*extensions.Scale, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(extensions.Resource("scale"), name) } return obj.(*extensions.Scale), nil }
func (s storeDeploymentsNamespacer) Get(name string) (*extensions.Deployment, error) { obj, exists, err := s.Indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(extensionsinternal.Resource("deployment"), name) } return obj.(*extensions.Deployment), nil }
// Get retrieves the Job from the indexer for a given namespace and name. func (s jobNamespaceLister) Get(name string) (*v1beta1.Job, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(extensions.Resource("job"), name) } return obj.(*v1beta1.Job), nil }
// Get retrieves the DaemonSet from the indexer for a given namespace and name. func (s daemonSetNamespaceLister) Get(name string) (*extensions.DaemonSet, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(extensions.Resource("daemonset"), name) } return obj.(*extensions.DaemonSet), nil }
// Get retrieves the NetworkPolicy from the indexer for a given namespace and name. func (s networkPolicyNamespaceLister) Get(name string) (*extensions.NetworkPolicy, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } if !exists { return nil, errors.NewNotFound(extensions.Resource("networkpolicy"), name) } return obj.(*extensions.NetworkPolicy), nil }
// NewREST returns a RESTStorage object that will work against DaemonSets. func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { prefix := "/" + opts.ResourcePrefix newListFunc := func() runtime.Object { return &extensions.DaemonSetList{} } storageInterface, dFunc := opts.Decorator( opts.StorageConfig, cachesize.GetWatchCacheSizeByResource(cachesize.Daemonsets), &extensions.DaemonSet{}, prefix, daemonset.Strategy, newListFunc, daemonset.GetAttrs, storage.NoTriggerPublisher, ) store := &genericregistry.Store{ NewFunc: func() runtime.Object { return &extensions.DaemonSet{} }, // NewListFunc returns an object capable of storing results of an etcd list. NewListFunc: newListFunc, // Produces a path 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 genericregistry.NamespaceKeyRootFunc(ctx, prefix) }, // Produces a path 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 genericregistry.NamespaceKeyFunc(ctx, prefix, name) }, // Retrieve the name field of a daemon set ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.DaemonSet).Name, nil }, // Used to match objects based on labels/fields for list and watch PredicateFunc: daemonset.MatchDaemonSet, QualifiedResource: extensions.Resource("daemonsets"), EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate daemon set creation CreateStrategy: daemonset.Strategy, // Used to validate daemon set updates UpdateStrategy: daemonset.Strategy, DeleteStrategy: daemonset.Strategy, Storage: storageInterface, DestroyFunc: dFunc, } statusStore := *store statusStore.UpdateStrategy = daemonset.StatusStrategy return &REST{store}, &StatusREST{store: &statusStore} }
func (r *ScaleREST) Get(ctx api.Context, name string) (runtime.Object, error) { rs, err := r.registry.GetReplicaSet(ctx, name) if err != nil { return nil, errors.NewNotFound(extensions.Resource("replicasets/scale"), name) } scale, err := scaleFromReplicaSet(rs) if err != nil { return nil, errors.NewBadRequest(fmt.Sprintf("%v", err)) } return scale, err }
func (r *ScaleREST) Get(ctx api.Context, name string) (runtime.Object, error) { deployment, err := r.registry.GetDeployment(ctx, name) if err != nil { return nil, errors.NewNotFound(extensions.Resource("deployments/scale"), name) } scale, err := scaleFromDeployment(deployment) if err != nil { return nil, errors.NewBadRequest(fmt.Sprintf("%v", err)) } return scale, nil }