mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-11-02 03:08:15 +00:00
Merge pull request #40853 from sttts/sttts-more-cutoffs-7
Automatic merge from submit-queue (batch tested with PRs 35782, 35831, 39279, 40853, 40867) genericapiserver: cut off more dependencies – episode 7 Follow-up of https://github.com/kubernetes/kubernetes/pull/40822 approved based on #40363
This commit is contained in:
@@ -24,6 +24,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
genericfilters "k8s.io/apiserver/pkg/server/filters"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
||||
kubeinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated"
|
||||
v1listers "k8s.io/kubernetes/pkg/client/listers/core/v1"
|
||||
@@ -140,7 +141,7 @@ func (c completedConfig) New() (*APIDiscoveryServer, error) {
|
||||
proxyMux: proxyMux,
|
||||
}
|
||||
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName)
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apiregistration.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||
apiGroupInfo.GroupMeta.GroupVersion = v1alpha1.SchemeGroupVersion
|
||||
v1alpha1storage := map[string]rest.Storage{}
|
||||
v1alpha1storage["apiservices"] = apiservicestorage.NewREST(c.RESTOptionsGetter)
|
||||
|
||||
@@ -116,7 +116,8 @@ func (o DiscoveryServerOptions) RunDiscoveryServer() error {
|
||||
return fmt.Errorf("error creating self-signed certificates: %v", err)
|
||||
}
|
||||
|
||||
genericAPIServerConfig := genericapiserver.NewConfig()
|
||||
genericAPIServerConfig := genericapiserver.NewConfig().
|
||||
WithSerializer(api.Codecs)
|
||||
if _, err := genericAPIServerConfig.ApplySecureServingOptions(o.SecureServing); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ go_library(
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
)
|
||||
|
||||
// rest implements a RESTStorage for API services against etcd
|
||||
@@ -41,6 +42,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
||||
},
|
||||
PredicateFunc: apiservice.MatchAPIService,
|
||||
QualifiedResource: apiregistration.Resource("apiservices"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("apiservices"),
|
||||
|
||||
CreateStrategy: apiservice.Strategy,
|
||||
UpdateStrategy: apiservice.Strategy,
|
||||
|
||||
@@ -106,6 +106,7 @@ func Run(s *options.ServerRunOptions) error {
|
||||
|
||||
// create config from options
|
||||
genericConfig := genericapiserver.NewConfig().
|
||||
WithSerializer(api.Codecs).
|
||||
ApplyOptions(s.GenericServerRunOptions).
|
||||
ApplyInsecureServingOptions(s.InsecureServing)
|
||||
|
||||
@@ -195,7 +196,7 @@ func Run(s *options.ServerRunOptions) error {
|
||||
}
|
||||
storageFactory, err := kubeapiserver.BuildDefaultStorageFactory(
|
||||
s.Etcd.StorageConfig, s.GenericServerRunOptions.DefaultStorageMediaType, api.Codecs,
|
||||
genericapiserver.NewDefaultResourceEncodingConfig(), storageGroupsToEncodingVersion,
|
||||
genericapiserver.NewDefaultResourceEncodingConfig(api.Registry), storageGroupsToEncodingVersion,
|
||||
// FIXME: this GroupVersionResource override should be configurable
|
||||
[]schema.GroupVersionResource{batch.Resource("cronjobs").WithVersion("v2alpha1")},
|
||||
master.DefaultAPIResourceConfigSource(), s.GenericServerRunOptions.RuntimeConfig)
|
||||
@@ -294,7 +295,7 @@ func Run(s *options.ServerRunOptions) error {
|
||||
genericConfig.Authenticator = apiAuthenticator
|
||||
genericConfig.Authorizer = apiAuthorizer
|
||||
genericConfig.AdmissionControl = admissionController
|
||||
genericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.GetOpenAPIDefinitions)
|
||||
genericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.GetOpenAPIDefinitions, api.Scheme)
|
||||
genericConfig.OpenAPIConfig.PostProcessSpec = postProcessOpenAPISpecForBackwardCompatibility
|
||||
genericConfig.OpenAPIConfig.SecurityDefinitions = securityDefinitions
|
||||
genericConfig.OpenAPIConfig.Info.Title = "Kubernetes"
|
||||
|
||||
@@ -51,7 +51,7 @@ func newStorageFactory() genericapiserver.StorageFactory {
|
||||
ServerList: []string{"http://127.0.0.1:2379"},
|
||||
Copier: api.Scheme,
|
||||
}
|
||||
storageFactory := genericapiserver.NewDefaultStorageFactory(config, "application/json", api.Codecs, genericapiserver.NewDefaultResourceEncodingConfig(), genericapiserver.NewResourceConfig())
|
||||
storageFactory := genericapiserver.NewDefaultStorageFactory(config, "application/json", api.Codecs, genericapiserver.NewDefaultResourceEncodingConfig(api.Registry), genericapiserver.NewResourceConfig())
|
||||
|
||||
return storageFactory
|
||||
}
|
||||
@@ -104,6 +104,7 @@ func (serverOptions *ServerRunOptions) Run(stopCh <-chan struct{}) error {
|
||||
|
||||
// create config from options
|
||||
config := genericapiserver.NewConfig().
|
||||
WithSerializer(api.Codecs).
|
||||
ApplyOptions(serverOptions.GenericServerRunOptions).
|
||||
ApplyInsecureServingOptions(serverOptions.InsecureServing)
|
||||
|
||||
|
||||
@@ -88,9 +88,10 @@ func Run(s *options.ServerRunOptions) error {
|
||||
return utilerrors.NewAggregate(errs)
|
||||
}
|
||||
|
||||
genericConfig := genericapiserver.NewConfig(). // create the new config
|
||||
ApplyOptions(s.GenericServerRunOptions). // apply the options selected
|
||||
ApplyInsecureServingOptions(s.InsecureServing)
|
||||
genericConfig := genericapiserver.NewConfig().
|
||||
WithSerializer(api.Codecs).
|
||||
ApplyOptions(s.GenericServerRunOptions).
|
||||
ApplyInsecureServingOptions(s.InsecureServing)
|
||||
|
||||
if _, err := genericConfig.ApplySecureServingOptions(s.SecureServing); err != nil {
|
||||
return fmt.Errorf("failed to configure https: %s", err)
|
||||
@@ -112,7 +113,7 @@ func Run(s *options.ServerRunOptions) error {
|
||||
}
|
||||
storageFactory, err := kubeapiserver.BuildDefaultStorageFactory(
|
||||
s.Etcd.StorageConfig, s.GenericServerRunOptions.DefaultStorageMediaType, api.Codecs,
|
||||
genericapiserver.NewDefaultResourceEncodingConfig(), storageGroupsToEncodingVersion,
|
||||
genericapiserver.NewDefaultResourceEncodingConfig(api.Registry), storageGroupsToEncodingVersion,
|
||||
[]schema.GroupVersionResource{}, resourceConfig, s.GenericServerRunOptions.RuntimeConfig)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error in initializing storage factory: %s", err)
|
||||
@@ -177,7 +178,7 @@ func Run(s *options.ServerRunOptions) error {
|
||||
genericConfig.Authenticator = apiAuthenticator
|
||||
genericConfig.Authorizer = apiAuthorizer
|
||||
genericConfig.AdmissionControl = admissionController
|
||||
genericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(openapi.GetOpenAPIDefinitions)
|
||||
genericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(openapi.GetOpenAPIDefinitions, api.Scheme)
|
||||
genericConfig.OpenAPIConfig.PostProcessSpec = postProcessOpenAPISpecForBackwardCompatibility
|
||||
genericConfig.OpenAPIConfig.SecurityDefinitions = securityDefinitions
|
||||
genericConfig.SwaggerConfig = genericapiserver.DefaultSwaggerConfig()
|
||||
|
||||
@@ -101,7 +101,7 @@ func TestDaemonSetController(t *testing.T) {
|
||||
updatedDaemonSet := GetDaemonSetFromChan(daemonsetUpdateChan)
|
||||
assert.True(t, daemonsetController.hasFinalizerFunc(updatedDaemonSet, deletionhelper.FinalizerDeleteFromUnderlyingClusters))
|
||||
updatedDaemonSet = GetDaemonSetFromChan(daemonsetUpdateChan)
|
||||
assert.True(t, daemonsetController.hasFinalizerFunc(updatedDaemonSet, apiv1.FinalizerOrphan))
|
||||
assert.True(t, daemonsetController.hasFinalizerFunc(updatedDaemonSet, metav1.FinalizerOrphan))
|
||||
daemonset1 = *updatedDaemonSet
|
||||
|
||||
createdDaemonSet := GetDaemonSetFromChan(cluster1CreateChan)
|
||||
|
||||
@@ -144,7 +144,7 @@ func TestIngressController(t *testing.T) {
|
||||
updatedIngress := GetIngressFromChan(t, fedIngressUpdateChan)
|
||||
assert.True(t, ingressController.hasFinalizerFunc(updatedIngress, deletionhelper.FinalizerDeleteFromUnderlyingClusters))
|
||||
updatedIngress = GetIngressFromChan(t, fedIngressUpdateChan)
|
||||
assert.True(t, ingressController.hasFinalizerFunc(updatedIngress, apiv1.FinalizerOrphan), fmt.Sprintf("ingress does not have the orphan finalizer: %v", updatedIngress))
|
||||
assert.True(t, ingressController.hasFinalizerFunc(updatedIngress, metav1.FinalizerOrphan), fmt.Sprintf("ingress does not have the orphan finalizer: %v", updatedIngress))
|
||||
fedIngress = *updatedIngress
|
||||
|
||||
t.Log("Checking that Ingress was correctly created in cluster 1")
|
||||
@@ -305,7 +305,7 @@ func WaitForFinalizersInFederationStore(ingressController *IngressController, st
|
||||
return false, err
|
||||
}
|
||||
ingress := obj.(*extensionsv1beta1.Ingress)
|
||||
if ingressController.hasFinalizerFunc(ingress, apiv1.FinalizerOrphan) &&
|
||||
if ingressController.hasFinalizerFunc(ingress, metav1.FinalizerOrphan) &&
|
||||
ingressController.hasFinalizerFunc(ingress, deletionhelper.FinalizerDeleteFromUnderlyingClusters) {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ func TestNamespaceController(t *testing.T) {
|
||||
// Delete the namespace with orphan finalizer (let namespaces
|
||||
// in underlying clusters be as is).
|
||||
// TODO: Add a test without orphan finalizer.
|
||||
ns1.ObjectMeta.Finalizers = append(ns1.ObjectMeta.Finalizers, apiv1.FinalizerOrphan)
|
||||
ns1.ObjectMeta.Finalizers = append(ns1.ObjectMeta.Finalizers, metav1.FinalizerOrphan)
|
||||
ns1.DeletionTimestamp = &metav1.Time{Time: time.Now()}
|
||||
namespaceWatch.Modify(&ns1)
|
||||
assert.Equal(t, ns1.Name, GetStringFromChan(nsDeleteChan))
|
||||
|
||||
@@ -101,7 +101,7 @@ func TestSecretController(t *testing.T) {
|
||||
updatedSecret := GetSecretFromChan(secretUpdateChan)
|
||||
assert.True(t, secretController.hasFinalizerFunc(updatedSecret, deletionhelper.FinalizerDeleteFromUnderlyingClusters))
|
||||
updatedSecret = GetSecretFromChan(secretUpdateChan)
|
||||
assert.True(t, secretController.hasFinalizerFunc(updatedSecret, apiv1.FinalizerOrphan))
|
||||
assert.True(t, secretController.hasFinalizerFunc(updatedSecret, metav1.FinalizerOrphan))
|
||||
secret1 = *updatedSecret
|
||||
|
||||
// Verify that the secret is created in underlying cluster1.
|
||||
|
||||
@@ -14,8 +14,8 @@ go_library(
|
||||
deps = [
|
||||
"//federation/pkg/federation-controller/util:go_default_library",
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/v1:go_default_library",
|
||||
"//vendor:github.com/golang/glog",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/client-go/tools/record",
|
||||
],
|
||||
|
||||
@@ -24,11 +24,11 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/client-go/tools/record"
|
||||
"k8s.io/kubernetes/federation/pkg/federation-controller/util"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
api_v1 "k8s.io/kubernetes/pkg/api/v1"
|
||||
|
||||
"github.com/golang/glog"
|
||||
)
|
||||
@@ -96,9 +96,9 @@ func (dh *DeletionHelper) EnsureFinalizers(obj runtime.Object) (
|
||||
return obj, err
|
||||
}
|
||||
}
|
||||
if !dh.hasFinalizerFunc(obj, api_v1.FinalizerOrphan) {
|
||||
glog.V(2).Infof("Adding finalizer %s to %s", api_v1.FinalizerOrphan, dh.objNameFunc(obj))
|
||||
obj, err := dh.addFinalizerFunc(obj, api_v1.FinalizerOrphan)
|
||||
if !dh.hasFinalizerFunc(obj, metav1.FinalizerOrphan) {
|
||||
glog.V(2).Infof("Adding finalizer %s to %s", metav1.FinalizerOrphan, dh.objNameFunc(obj))
|
||||
obj, err := dh.addFinalizerFunc(obj, metav1.FinalizerOrphan)
|
||||
if err != nil {
|
||||
return obj, err
|
||||
}
|
||||
@@ -120,7 +120,7 @@ func (dh *DeletionHelper) HandleObjectInUnderlyingClusters(obj runtime.Object) (
|
||||
glog.V(2).Infof("obj does not have %s finalizer. Nothing to do", FinalizerDeleteFromUnderlyingClusters)
|
||||
return obj, nil
|
||||
}
|
||||
hasOrphanFinalizer := dh.hasFinalizerFunc(obj, api_v1.FinalizerOrphan)
|
||||
hasOrphanFinalizer := dh.hasFinalizerFunc(obj, metav1.FinalizerOrphan)
|
||||
if hasOrphanFinalizer {
|
||||
glog.V(2).Infof("Found finalizer orphan. Nothing to do, just remove the finalizer")
|
||||
// If the obj has FinalizerOrphan finalizer, then we need to orphan the
|
||||
@@ -130,7 +130,7 @@ func (dh *DeletionHelper) HandleObjectInUnderlyingClusters(obj runtime.Object) (
|
||||
if err != nil {
|
||||
return obj, err
|
||||
}
|
||||
return dh.removeFinalizerFunc(obj, api_v1.FinalizerOrphan)
|
||||
return dh.removeFinalizerFunc(obj, metav1.FinalizerOrphan)
|
||||
}
|
||||
|
||||
glog.V(2).Infof("Deleting obj %s from underlying clusters", objName)
|
||||
|
||||
@@ -19,6 +19,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||
],
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
)
|
||||
|
||||
type REST struct {
|
||||
@@ -55,6 +56,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: cluster.MatchCluster,
|
||||
QualifiedResource: federation.Resource("clusters"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("clusters"),
|
||||
|
||||
CreateStrategy: cluster.Strategy,
|
||||
UpdateStrategy: cluster.Strategy,
|
||||
|
||||
@@ -98,6 +98,7 @@ filegroup(
|
||||
"//pkg/securitycontext:all-srcs",
|
||||
"//pkg/serviceaccount:all-srcs",
|
||||
"//pkg/ssh:all-srcs",
|
||||
"//pkg/storage/errors:all-srcs",
|
||||
"//pkg/storage/etcd:all-srcs",
|
||||
"//pkg/storage/etcd3:all-srcs",
|
||||
"//pkg/storage/storagebackend/factory:all-srcs",
|
||||
|
||||
@@ -22,9 +22,6 @@ filegroup(
|
||||
|
||||
filegroup(
|
||||
name = "all-srcs",
|
||||
srcs = [
|
||||
":package-srcs",
|
||||
"//pkg/api/errors/storage:all-srcs",
|
||||
],
|
||||
srcs = [":package-srcs"],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
|
||||
@@ -244,7 +244,7 @@ func IsServiceIPRequested(service *Service) bool {
|
||||
|
||||
var standardFinalizers = sets.NewString(
|
||||
string(FinalizerKubernetes),
|
||||
FinalizerOrphan,
|
||||
metav1.FinalizerOrphan,
|
||||
)
|
||||
|
||||
// HasAnnotation returns a bool if passed in annotation exists
|
||||
|
||||
@@ -2798,10 +2798,10 @@ type NamespaceSpec struct {
|
||||
// FinalizerName is the name identifying a finalizer during namespace lifecycle.
|
||||
type FinalizerName string
|
||||
|
||||
// These are internal finalizer values to Kubernetes, must be qualified name unless defined here
|
||||
// These are internal finalizer values to Kubernetes, must be qualified name unless defined here or
|
||||
// in metav1.
|
||||
const (
|
||||
FinalizerKubernetes FinalizerName = "kubernetes"
|
||||
FinalizerOrphan string = "orphan"
|
||||
)
|
||||
|
||||
// NamespaceStatus is information about the current status of a Namespace.
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/selection"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
@@ -82,7 +83,7 @@ func IsServiceIPRequested(service *Service) bool {
|
||||
|
||||
var standardFinalizers = sets.NewString(
|
||||
string(FinalizerKubernetes),
|
||||
FinalizerOrphan,
|
||||
metav1.FinalizerOrphan,
|
||||
)
|
||||
|
||||
func IsStandardFinalizerName(str string) bool {
|
||||
|
||||
@@ -3220,10 +3220,10 @@ type NodeList struct {
|
||||
// FinalizerName is the name identifying a finalizer during namespace lifecycle.
|
||||
type FinalizerName string
|
||||
|
||||
// These are internal finalizer values to Kubernetes, must be qualified name unless defined here
|
||||
// These are internal finalizer values to Kubernetes, must be qualified name unless defined here or
|
||||
// in metav1.
|
||||
const (
|
||||
FinalizerKubernetes FinalizerName = "kubernetes"
|
||||
FinalizerOrphan string = "orphan"
|
||||
)
|
||||
|
||||
// NamespaceSpec describes the attributes on a Namespace.
|
||||
|
||||
@@ -18,7 +18,6 @@ go_library(
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api/v1:go_default_library",
|
||||
"//pkg/controller/garbagecollector/metaonly:go_default_library",
|
||||
"//pkg/util/metrics:go_default_library",
|
||||
"//vendor:github.com/golang/glog",
|
||||
|
||||
@@ -39,7 +39,6 @@ import (
|
||||
"k8s.io/client-go/tools/cache"
|
||||
"k8s.io/client-go/util/clock"
|
||||
"k8s.io/client-go/util/workqueue"
|
||||
"k8s.io/kubernetes/pkg/api/v1"
|
||||
"k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly"
|
||||
|
||||
// import known versions
|
||||
@@ -235,7 +234,7 @@ func shouldOrphanDependents(e *event, accessor metav1.Object) bool {
|
||||
}
|
||||
finalizers := accessor.GetFinalizers()
|
||||
for _, finalizer := range finalizers {
|
||||
if finalizer == v1.FinalizerOrphan {
|
||||
if finalizer == metav1.FinalizerOrphan {
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -280,7 +279,7 @@ func (gc *GarbageCollector) removeOrphanFinalizer(owner *node) error {
|
||||
var newFinalizers []string
|
||||
found := false
|
||||
for _, f := range finalizers {
|
||||
if f == v1.FinalizerOrphan {
|
||||
if f == metav1.FinalizerOrphan {
|
||||
found = true
|
||||
break
|
||||
} else {
|
||||
|
||||
@@ -18,11 +18,9 @@ go_library(
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/errors/storage:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/storage/errors:go_default_library",
|
||||
"//pkg/storage/etcd:go_default_library",
|
||||
"//pkg/storage/storagebackend/factory:go_default_library",
|
||||
"//vendor:github.com/golang/glog",
|
||||
@@ -54,11 +52,8 @@ go_test(
|
||||
library = ":go_default_library",
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/testapi:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/core/pod:go_default_library",
|
||||
"//pkg/storage/etcd:go_default_library",
|
||||
"//pkg/storage/etcd/testing:go_default_library",
|
||||
"//pkg/storage/storagebackend/factory:go_default_library",
|
||||
@@ -66,15 +61,19 @@ go_test(
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/equality",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/errors",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/meta",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/testing",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/internalversion",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/fields",
|
||||
"//vendor:k8s.io/apimachinery/pkg/labels",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime/serializer",
|
||||
"//vendor:k8s.io/apimachinery/pkg/selection",
|
||||
"//vendor:k8s.io/apimachinery/pkg/util/validation/field",
|
||||
"//vendor:k8s.io/apimachinery/pkg/util/wait",
|
||||
"//vendor:k8s.io/apimachinery/pkg/watch",
|
||||
"//vendor:k8s.io/apiserver/pkg/apis/example",
|
||||
"//vendor:k8s.io/apiserver/pkg/apis/example/v1",
|
||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||
"//vendor:k8s.io/apiserver/pkg/storage",
|
||||
"//vendor:k8s.io/apiserver/pkg/storage/names",
|
||||
|
||||
@@ -25,23 +25,23 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"k8s.io/apimachinery/pkg/watch"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/apiserver/pkg/apis/example"
|
||||
)
|
||||
|
||||
func TestDecoratedWatcher(t *testing.T) {
|
||||
w := watch.NewFake()
|
||||
decorator := func(obj runtime.Object) error {
|
||||
pod := obj.(*api.Pod)
|
||||
pod := obj.(*example.Pod)
|
||||
pod.Annotations = map[string]string{"decorated": "true"}
|
||||
return nil
|
||||
}
|
||||
dw := newDecoratedWatcher(w, decorator)
|
||||
defer dw.Stop()
|
||||
|
||||
go w.Add(&api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}})
|
||||
go w.Add(&example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}})
|
||||
select {
|
||||
case e := <-dw.ResultChan():
|
||||
pod, ok := e.Object.(*api.Pod)
|
||||
pod, ok := e.Object.(*example.Pod)
|
||||
if !ok {
|
||||
t.Errorf("Should received object of type *api.Pod, get type (%T)", e.Object)
|
||||
return
|
||||
@@ -63,7 +63,7 @@ func TestDecoratedWatcherError(t *testing.T) {
|
||||
dw := newDecoratedWatcher(w, decorator)
|
||||
defer dw.Stop()
|
||||
|
||||
go w.Add(&api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}})
|
||||
go w.Add(&example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}})
|
||||
select {
|
||||
case e := <-dw.ResultChan():
|
||||
if e.Type != watch.Error {
|
||||
|
||||
@@ -37,15 +37,16 @@ import (
|
||||
"k8s.io/apimachinery/pkg/watch"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/storage"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
storeerr "k8s.io/kubernetes/pkg/api/errors/storage"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
storeerr "k8s.io/kubernetes/pkg/storage/errors"
|
||||
|
||||
"github.com/golang/glog"
|
||||
)
|
||||
|
||||
// defaultWatchCacheSize is the default size of a watch catch per resource in number of entries.
|
||||
const DefaultWatchCacheSize = 100
|
||||
|
||||
// ObjectFunc is a function to act on a given object. An error may be returned
|
||||
// if the hook cannot be completed. An ObjectFunc may transform the provided
|
||||
// object.
|
||||
@@ -162,6 +163,10 @@ type Store struct {
|
||||
Storage storage.Interface
|
||||
// Called to cleanup clients used by the underlying Storage; optional.
|
||||
DestroyFunc func()
|
||||
// Maximum size of the watch history cached in memory, in number of entries.
|
||||
// A zero value here means that a default is used. This value is ignored if
|
||||
// Storage is non-nil.
|
||||
WatchCacheSize int
|
||||
}
|
||||
|
||||
// Note: the rest.StandardStorage interface aggregates the common REST verbs
|
||||
@@ -546,7 +551,7 @@ func shouldUpdateFinalizers(e *Store, accessor metav1.Object, options *metav1.De
|
||||
hasOrphanFinalizer := false
|
||||
finalizers := accessor.GetFinalizers()
|
||||
for _, f := range finalizers {
|
||||
if f == api.FinalizerOrphan {
|
||||
if f == metav1.FinalizerOrphan {
|
||||
shouldOrphan = true
|
||||
hasOrphanFinalizer = true
|
||||
break
|
||||
@@ -558,13 +563,13 @@ func shouldUpdateFinalizers(e *Store, accessor metav1.Object, options *metav1.De
|
||||
shouldOrphan = *options.OrphanDependents
|
||||
}
|
||||
if shouldOrphan && !hasOrphanFinalizer {
|
||||
finalizers = append(finalizers, api.FinalizerOrphan)
|
||||
finalizers = append(finalizers, metav1.FinalizerOrphan)
|
||||
return true, finalizers
|
||||
}
|
||||
if !shouldOrphan && hasOrphanFinalizer {
|
||||
var newFinalizers []string
|
||||
for _, f := range finalizers {
|
||||
if f == api.FinalizerOrphan {
|
||||
if f == metav1.FinalizerOrphan {
|
||||
continue
|
||||
}
|
||||
newFinalizers = append(newFinalizers, f)
|
||||
@@ -1118,10 +1123,14 @@ func (e *Store) CompleteWithOptions(options *generic.StoreOptions) error {
|
||||
e.EnableGarbageCollection = opts.EnableGarbageCollection
|
||||
|
||||
if e.Storage == nil {
|
||||
capacity := DefaultWatchCacheSize
|
||||
if e.WatchCacheSize != 0 {
|
||||
capacity = DefaultWatchCacheSize
|
||||
}
|
||||
e.Storage, e.DestroyFunc = opts.Decorator(
|
||||
e.Copier,
|
||||
opts.StorageConfig,
|
||||
cachesize.GetWatchCacheSizeByResource(cachesize.Resource(e.QualifiedResource.Resource)),
|
||||
capacity,
|
||||
e.NewFunc(),
|
||||
prefix,
|
||||
keyFunc,
|
||||
|
||||
@@ -29,28 +29,38 @@ import (
|
||||
apiequality "k8s.io/apimachinery/pkg/api/equality"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
apitesting "k8s.io/apimachinery/pkg/api/testing"
|
||||
metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/fields"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||
"k8s.io/apimachinery/pkg/selection"
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"k8s.io/apiserver/pkg/apis/example"
|
||||
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/storage"
|
||||
"k8s.io/apiserver/pkg/storage/names"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/testapi"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/core/pod"
|
||||
etcdstorage "k8s.io/kubernetes/pkg/storage/etcd"
|
||||
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
|
||||
"k8s.io/kubernetes/pkg/storage/storagebackend/factory"
|
||||
storagetesting "k8s.io/kubernetes/pkg/storage/testing"
|
||||
)
|
||||
|
||||
var scheme = runtime.NewScheme()
|
||||
var codecs = serializer.NewCodecFactory(scheme)
|
||||
|
||||
func init() {
|
||||
metav1.AddToGroupVersion(scheme, metav1.SchemeGroupVersion)
|
||||
example.AddToScheme(scheme)
|
||||
examplev1.AddToScheme(scheme)
|
||||
}
|
||||
|
||||
type testGracefulStrategy struct {
|
||||
testRESTStrategy
|
||||
}
|
||||
@@ -104,11 +114,11 @@ func (t *testRESTStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, ol
|
||||
func (t *testRESTStrategy) Canonicalize(obj runtime.Object) {}
|
||||
|
||||
func NewTestGenericStoreRegistry(t *testing.T) (factory.DestroyFunc, *Store) {
|
||||
return newTestGenericStoreRegistry(t, false)
|
||||
return newTestGenericStoreRegistry(t, scheme, false)
|
||||
}
|
||||
|
||||
func getPodAttrs(obj runtime.Object) (labels.Set, fields.Set, error) {
|
||||
pod := obj.(*api.Pod)
|
||||
pod := obj.(*example.Pod)
|
||||
return labels.Set{"name": pod.ObjectMeta.Name}, nil, nil
|
||||
}
|
||||
|
||||
@@ -139,20 +149,20 @@ func matchEverything() storage.SelectionPredicate {
|
||||
}
|
||||
|
||||
func TestStoreList(t *testing.T) {
|
||||
podA := &api.Pod{
|
||||
podA := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: "test", Name: "bar"},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
podB := &api.Pod{
|
||||
podB := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: "test", Name: "foo"},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
noNamespaceContext := genericapirequest.NewContext()
|
||||
|
||||
table := map[string]struct {
|
||||
in *api.PodList
|
||||
in *example.PodList
|
||||
m storage.SelectionPredicate
|
||||
out runtime.Object
|
||||
context genericapirequest.Context
|
||||
@@ -160,28 +170,28 @@ func TestStoreList(t *testing.T) {
|
||||
"notFound": {
|
||||
in: nil,
|
||||
m: matchEverything(),
|
||||
out: &api.PodList{Items: []api.Pod{}},
|
||||
out: &example.PodList{Items: []example.Pod{}},
|
||||
},
|
||||
"normal": {
|
||||
in: &api.PodList{Items: []api.Pod{*podA, *podB}},
|
||||
in: &example.PodList{Items: []example.Pod{*podA, *podB}},
|
||||
m: matchEverything(),
|
||||
out: &api.PodList{Items: []api.Pod{*podA, *podB}},
|
||||
out: &example.PodList{Items: []example.Pod{*podA, *podB}},
|
||||
},
|
||||
"normalFiltered": {
|
||||
in: &api.PodList{Items: []api.Pod{*podA, *podB}},
|
||||
in: &example.PodList{Items: []example.Pod{*podA, *podB}},
|
||||
m: matchPodName("foo"),
|
||||
out: &api.PodList{Items: []api.Pod{*podB}},
|
||||
out: &example.PodList{Items: []example.Pod{*podB}},
|
||||
},
|
||||
"normalFilteredNoNamespace": {
|
||||
in: &api.PodList{Items: []api.Pod{*podA, *podB}},
|
||||
in: &example.PodList{Items: []example.Pod{*podA, *podB}},
|
||||
m: matchPodName("foo"),
|
||||
out: &api.PodList{Items: []api.Pod{*podB}},
|
||||
out: &example.PodList{Items: []example.Pod{*podB}},
|
||||
context: noNamespaceContext,
|
||||
},
|
||||
"normalFilteredMatchMultiple": {
|
||||
in: &api.PodList{Items: []api.Pod{*podA, *podB}},
|
||||
in: &example.PodList{Items: []example.Pod{*podA, *podB}},
|
||||
m: matchPodName("foo", "makeMatchSingleReturnFalse"),
|
||||
out: &api.PodList{Items: []api.Pod{*podB}},
|
||||
out: &example.PodList{Items: []example.Pod{*podB}},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -215,17 +225,17 @@ func TestStoreList(t *testing.T) {
|
||||
// TestStoreListResourceVersion tests that if List with ResourceVersion > 0, it will wait until
|
||||
// the results are as fresh as given version.
|
||||
func TestStoreListResourceVersion(t *testing.T) {
|
||||
fooPod := &api.Pod{
|
||||
fooPod := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: "test", Name: "foo"},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
barPod := &api.Pod{
|
||||
barPod := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: "test", Name: "bar"},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
|
||||
destroyFunc, registry := newTestGenericStoreRegistry(t, true)
|
||||
destroyFunc, registry := newTestGenericStoreRegistry(t, scheme, true)
|
||||
defer destroyFunc()
|
||||
|
||||
obj, err := registry.Create(ctx, fooPod)
|
||||
@@ -269,7 +279,7 @@ func TestStoreListResourceVersion(t *testing.T) {
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
pl := l.(*api.PodList).Items
|
||||
pl := l.(*example.PodList).Items
|
||||
if len(pl) != 2 {
|
||||
t.Errorf("Expected get 2 items, but got %d", len(pl))
|
||||
}
|
||||
@@ -278,20 +288,21 @@ func TestStoreListResourceVersion(t *testing.T) {
|
||||
|
||||
func TestStoreCreate(t *testing.T) {
|
||||
gracefulPeriod := int64(50)
|
||||
podA := &api.Pod{
|
||||
podA := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "test"},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
podB := &api.Pod{
|
||||
podB := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "test"},
|
||||
Spec: api.PodSpec{NodeName: "machine2"},
|
||||
Spec: example.PodSpec{NodeName: "machine2"},
|
||||
}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
destroyFunc, registry := NewTestGenericStoreRegistry(t)
|
||||
defer destroyFunc()
|
||||
// re-define delete strategy to have graceful delete capability
|
||||
registry.DeleteStrategy = pod.Strategy
|
||||
defaultDeleteStrategy := testRESTStrategy{scheme, names.SimpleNameGenerator, true, false, true}
|
||||
registry.DeleteStrategy = testGracefulStrategy{defaultDeleteStrategy}
|
||||
|
||||
// create the object
|
||||
objA, err := registry.Create(testContext, podA)
|
||||
@@ -342,8 +353,8 @@ func TestStoreCreate(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func updateAndVerify(t *testing.T, ctx genericapirequest.Context, registry *Store, pod *api.Pod) bool {
|
||||
obj, _, err := registry.Update(ctx, pod.Name, rest.DefaultUpdatedObjectInfo(pod, api.Scheme))
|
||||
func updateAndVerify(t *testing.T, ctx genericapirequest.Context, registry *Store, pod *example.Pod) bool {
|
||||
obj, _, err := registry.Update(ctx, pod.Name, rest.DefaultUpdatedObjectInfo(pod, scheme))
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
return false
|
||||
@@ -361,17 +372,17 @@ func updateAndVerify(t *testing.T, ctx genericapirequest.Context, registry *Stor
|
||||
}
|
||||
|
||||
func TestStoreUpdate(t *testing.T) {
|
||||
podA := &api.Pod{
|
||||
podA := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "test"},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
podB := &api.Pod{
|
||||
podB := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "test"},
|
||||
Spec: api.PodSpec{NodeName: "machine2"},
|
||||
Spec: example.PodSpec{NodeName: "machine2"},
|
||||
}
|
||||
podAWithResourceVersion := &api.Pod{
|
||||
podAWithResourceVersion := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "test", ResourceVersion: "7"},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
@@ -379,7 +390,7 @@ func TestStoreUpdate(t *testing.T) {
|
||||
defer destroyFunc()
|
||||
|
||||
// Test1 try to update a non-existing node
|
||||
_, _, err := registry.Update(testContext, podA.Name, rest.DefaultUpdatedObjectInfo(podA, api.Scheme))
|
||||
_, _, err := registry.Update(testContext, podA.Name, rest.DefaultUpdatedObjectInfo(podA, scheme))
|
||||
if !errors.IsNotFound(err) {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
@@ -392,7 +403,7 @@ func TestStoreUpdate(t *testing.T) {
|
||||
registry.UpdateStrategy.(*testRESTStrategy).allowCreateOnUpdate = false
|
||||
|
||||
// Test3 outofDate
|
||||
_, _, err = registry.Update(testContext, podAWithResourceVersion.Name, rest.DefaultUpdatedObjectInfo(podAWithResourceVersion, api.Scheme))
|
||||
_, _, err = registry.Update(testContext, podAWithResourceVersion.Name, rest.DefaultUpdatedObjectInfo(podAWithResourceVersion, scheme))
|
||||
if !errors.IsConflict(err) {
|
||||
t.Errorf("Unexpected error updating podAWithResourceVersion: %v", err)
|
||||
}
|
||||
@@ -416,14 +427,14 @@ func TestNoOpUpdates(t *testing.T) {
|
||||
destroyFunc, registry := NewTestGenericStoreRegistry(t)
|
||||
defer destroyFunc()
|
||||
|
||||
newPod := func() *api.Pod {
|
||||
return &api.Pod{
|
||||
newPod := func() *example.Pod {
|
||||
return &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: metav1.NamespaceDefault,
|
||||
Name: "foo",
|
||||
Labels: map[string]string{"prepare_create": "true"},
|
||||
},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -440,7 +451,7 @@ func TestNoOpUpdates(t *testing.T) {
|
||||
|
||||
var updateResult runtime.Object
|
||||
p := newPod()
|
||||
if updateResult, _, err = registry.Update(genericapirequest.NewDefaultContext(), p.Name, rest.DefaultUpdatedObjectInfo(p, api.Scheme)); err != nil {
|
||||
if updateResult, _, err = registry.Update(genericapirequest.NewDefaultContext(), p.Name, rest.DefaultUpdatedObjectInfo(p, scheme)); err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
|
||||
@@ -475,7 +486,7 @@ func TestNoOpUpdates(t *testing.T) {
|
||||
type testPodExport struct{}
|
||||
|
||||
func (t testPodExport) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error {
|
||||
pod := obj.(*api.Pod)
|
||||
pod := obj.(*example.Pod)
|
||||
if pod.Labels == nil {
|
||||
pod.Labels = map[string]string{}
|
||||
}
|
||||
@@ -486,13 +497,13 @@ func (t testPodExport) Export(ctx genericapirequest.Context, obj runtime.Object,
|
||||
}
|
||||
|
||||
func TestStoreCustomExport(t *testing.T) {
|
||||
podA := api.Pod{
|
||||
podA := example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: "test",
|
||||
Name: "foo",
|
||||
Labels: map[string]string{},
|
||||
},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
|
||||
destroyFunc, registry := NewTestGenericStoreRegistry(t)
|
||||
@@ -510,7 +521,7 @@ func TestStoreCustomExport(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
exportedPod := obj.(*api.Pod)
|
||||
exportedPod := obj.(*example.Pod)
|
||||
if exportedPod.Labels["exported"] != "true" {
|
||||
t.Errorf("expected: exported->true, found: %s", exportedPod.Labels["exported"])
|
||||
}
|
||||
@@ -531,14 +542,14 @@ func TestStoreCustomExport(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestStoreBasicExport(t *testing.T) {
|
||||
podA := api.Pod{
|
||||
podA := example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: "test",
|
||||
Name: "foo",
|
||||
Labels: map[string]string{},
|
||||
},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Status: api.PodStatus{HostIP: "1.2.3.4"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
Status: example.PodStatus{HostIP: "1.2.3.4"},
|
||||
}
|
||||
|
||||
destroyFunc, registry := NewTestGenericStoreRegistry(t)
|
||||
@@ -554,7 +565,7 @@ func TestStoreBasicExport(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
exportedPod := obj.(*api.Pod)
|
||||
exportedPod := obj.(*example.Pod)
|
||||
if exportedPod.Labels["prepare_create"] != "true" {
|
||||
t.Errorf("expected: prepare_create->true, found: %s", exportedPod.Labels["prepare_create"])
|
||||
}
|
||||
@@ -567,9 +578,9 @@ func TestStoreBasicExport(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestStoreGet(t *testing.T) {
|
||||
podA := &api.Pod{
|
||||
podA := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: "test", Name: "foo"},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
@@ -588,9 +599,9 @@ func TestStoreGet(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestStoreDelete(t *testing.T) {
|
||||
podA := &api.Pod{
|
||||
podA := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
@@ -630,20 +641,20 @@ func TestGracefulStoreCanDeleteIfExistingGracePeriodZero(t *testing.T) {
|
||||
deletionTimestamp := metav1.NewTime(time.Now())
|
||||
deletionGracePeriodSeconds := int64(0)
|
||||
initialGeneration := int64(1)
|
||||
pod := &api.Pod{
|
||||
pod := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "foo",
|
||||
Generation: initialGeneration,
|
||||
DeletionGracePeriodSeconds: &deletionGracePeriodSeconds,
|
||||
DeletionTimestamp: &deletionTimestamp,
|
||||
},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
destroyFunc, registry := NewTestGenericStoreRegistry(t)
|
||||
registry.EnableGarbageCollection = false
|
||||
defaultDeleteStrategy := testRESTStrategy{api.Scheme, names.SimpleNameGenerator, true, false, true}
|
||||
defaultDeleteStrategy := testRESTStrategy{scheme, names.SimpleNameGenerator, true, false, true}
|
||||
registry.DeleteStrategy = testGracefulStrategy{defaultDeleteStrategy}
|
||||
defer destroyFunc()
|
||||
|
||||
@@ -661,15 +672,15 @@ func TestGracefulStoreCanDeleteIfExistingGracePeriodZero(t *testing.T) {
|
||||
|
||||
func TestGracefulStoreHandleFinalizers(t *testing.T) {
|
||||
initialGeneration := int64(1)
|
||||
podWithFinalizer := &api.Pod{
|
||||
podWithFinalizer := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, Generation: initialGeneration},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
destroyFunc, registry := NewTestGenericStoreRegistry(t)
|
||||
registry.EnableGarbageCollection = true
|
||||
defaultDeleteStrategy := testRESTStrategy{api.Scheme, names.SimpleNameGenerator, true, false, true}
|
||||
defaultDeleteStrategy := testRESTStrategy{scheme, names.SimpleNameGenerator, true, false, true}
|
||||
registry.DeleteStrategy = testGracefulStrategy{defaultDeleteStrategy}
|
||||
defer destroyFunc()
|
||||
// create pod
|
||||
@@ -688,11 +699,11 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
|
||||
updatedPodWithFinalizer := &api.Pod{
|
||||
updatedPodWithFinalizer := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, ResourceVersion: podWithFinalizer.ObjectMeta.ResourceVersion},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
_, _, err = registry.Update(testContext, updatedPodWithFinalizer.ObjectMeta.Name, rest.DefaultUpdatedObjectInfo(updatedPodWithFinalizer, api.Scheme))
|
||||
_, _, err = registry.Update(testContext, updatedPodWithFinalizer.ObjectMeta.Name, rest.DefaultUpdatedObjectInfo(updatedPodWithFinalizer, scheme))
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
@@ -703,11 +714,11 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
|
||||
podWithNoFinalizer := &api.Pod{
|
||||
podWithNoFinalizer := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", ResourceVersion: podWithFinalizer.ObjectMeta.ResourceVersion},
|
||||
Spec: api.PodSpec{NodeName: "anothermachine"},
|
||||
Spec: example.PodSpec{NodeName: "anothermachine"},
|
||||
}
|
||||
_, _, err = registry.Update(testContext, podWithFinalizer.ObjectMeta.Name, rest.DefaultUpdatedObjectInfo(podWithNoFinalizer, api.Scheme))
|
||||
_, _, err = registry.Update(testContext, podWithFinalizer.ObjectMeta.Name, rest.DefaultUpdatedObjectInfo(podWithNoFinalizer, scheme))
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
@@ -720,9 +731,9 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) {
|
||||
|
||||
func TestNonGracefulStoreHandleFinalizers(t *testing.T) {
|
||||
initialGeneration := int64(1)
|
||||
podWithFinalizer := &api.Pod{
|
||||
podWithFinalizer := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, Generation: initialGeneration},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
@@ -746,7 +757,7 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
podWithFinalizer, ok := obj.(*api.Pod)
|
||||
podWithFinalizer, ok := obj.(*example.Pod)
|
||||
if !ok {
|
||||
t.Errorf("Unexpected object: %#v", obj)
|
||||
}
|
||||
@@ -760,11 +771,11 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) {
|
||||
t.Errorf("Deletion didn't increase Generation.")
|
||||
}
|
||||
|
||||
updatedPodWithFinalizer := &api.Pod{
|
||||
updatedPodWithFinalizer := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, ResourceVersion: podWithFinalizer.ObjectMeta.ResourceVersion},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
_, _, err = registry.Update(testContext, updatedPodWithFinalizer.ObjectMeta.Name, rest.DefaultUpdatedObjectInfo(updatedPodWithFinalizer, api.Scheme))
|
||||
_, _, err = registry.Update(testContext, updatedPodWithFinalizer.ObjectMeta.Name, rest.DefaultUpdatedObjectInfo(updatedPodWithFinalizer, scheme))
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
@@ -774,16 +785,16 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
podWithFinalizer, ok = obj.(*api.Pod)
|
||||
podWithFinalizer, ok = obj.(*example.Pod)
|
||||
if !ok {
|
||||
t.Errorf("Unexpected object: %#v", obj)
|
||||
}
|
||||
|
||||
podWithNoFinalizer := &api.Pod{
|
||||
podWithNoFinalizer := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "foo", ResourceVersion: podWithFinalizer.ObjectMeta.ResourceVersion},
|
||||
Spec: api.PodSpec{NodeName: "anothermachine"},
|
||||
Spec: example.PodSpec{NodeName: "anothermachine"},
|
||||
}
|
||||
_, _, err = registry.Update(testContext, podWithFinalizer.ObjectMeta.Name, rest.DefaultUpdatedObjectInfo(podWithNoFinalizer, api.Scheme))
|
||||
_, _, err = registry.Update(testContext, podWithFinalizer.ObjectMeta.Name, rest.DefaultUpdatedObjectInfo(podWithNoFinalizer, scheme))
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
@@ -796,28 +807,28 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) {
|
||||
|
||||
func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
initialGeneration := int64(1)
|
||||
podWithOrphanFinalizer := func(name string) *api.Pod {
|
||||
return &api.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: name, Finalizers: []string{"foo.com/x", api.FinalizerOrphan, "bar.com/y"}, Generation: initialGeneration},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
podWithOrphanFinalizer := func(name string) *example.Pod {
|
||||
return &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: name, Finalizers: []string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"}, Generation: initialGeneration},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
}
|
||||
podWithOtherFinalizers := func(name string) *api.Pod {
|
||||
return &api.Pod{
|
||||
podWithOtherFinalizers := func(name string) *example.Pod {
|
||||
return &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: name, Finalizers: []string{"foo.com/x", "bar.com/y"}, Generation: initialGeneration},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
}
|
||||
podWithNoFinalizer := func(name string) *api.Pod {
|
||||
return &api.Pod{
|
||||
podWithNoFinalizer := func(name string) *example.Pod {
|
||||
return &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: name, Generation: initialGeneration},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
}
|
||||
podWithOnlyOrphanFinalizer := func(name string) *api.Pod {
|
||||
return &api.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: name, Finalizers: []string{api.FinalizerOrphan}, Generation: initialGeneration},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
podWithOnlyOrphanFinalizer := func(name string) *example.Pod {
|
||||
return &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: name, Finalizers: []string{metav1.FinalizerOrphan}, Generation: initialGeneration},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
}
|
||||
trueVar, falseVar := true, false
|
||||
@@ -826,13 +837,13 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
nilOrphanOptions := &metav1.DeleteOptions{}
|
||||
|
||||
// defaultDeleteStrategy doesn't implement rest.GarbageCollectionDeleteStrategy.
|
||||
defaultDeleteStrategy := &testRESTStrategy{api.Scheme, names.SimpleNameGenerator, true, false, true}
|
||||
defaultDeleteStrategy := &testRESTStrategy{scheme, names.SimpleNameGenerator, true, false, true}
|
||||
// orphanDeleteStrategy indicates the default garbage collection policy is
|
||||
// to orphan dependentes.
|
||||
orphanDeleteStrategy := &testOrphanDeleteStrategy{defaultDeleteStrategy}
|
||||
|
||||
testcases := []struct {
|
||||
pod *api.Pod
|
||||
pod *example.Pod
|
||||
options *metav1.DeleteOptions
|
||||
strategy rest.RESTDeleteStrategy
|
||||
expectNotFound bool
|
||||
@@ -844,28 +855,28 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
orphanOptions,
|
||||
defaultDeleteStrategy,
|
||||
false,
|
||||
[]string{"foo.com/x", api.FinalizerOrphan, "bar.com/y"},
|
||||
[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"},
|
||||
},
|
||||
{
|
||||
podWithOtherFinalizers("pod2"),
|
||||
orphanOptions,
|
||||
defaultDeleteStrategy,
|
||||
false,
|
||||
[]string{"foo.com/x", "bar.com/y", api.FinalizerOrphan},
|
||||
[]string{"foo.com/x", "bar.com/y", metav1.FinalizerOrphan},
|
||||
},
|
||||
{
|
||||
podWithNoFinalizer("pod3"),
|
||||
orphanOptions,
|
||||
defaultDeleteStrategy,
|
||||
false,
|
||||
[]string{api.FinalizerOrphan},
|
||||
[]string{metav1.FinalizerOrphan},
|
||||
},
|
||||
{
|
||||
podWithOnlyOrphanFinalizer("pod4"),
|
||||
orphanOptions,
|
||||
defaultDeleteStrategy,
|
||||
false,
|
||||
[]string{api.FinalizerOrphan},
|
||||
[]string{metav1.FinalizerOrphan},
|
||||
},
|
||||
// cases run with DeleteOptions.OrphanDedependents=false
|
||||
// these cases all have oprhanDeleteStrategy, which should be ignored
|
||||
@@ -907,14 +918,14 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
nilOrphanOptions,
|
||||
defaultDeleteStrategy,
|
||||
false,
|
||||
[]string{"foo.com/x", api.FinalizerOrphan, "bar.com/y"},
|
||||
[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"},
|
||||
},
|
||||
{
|
||||
podWithOrphanFinalizer("pod10"),
|
||||
nilOrphanOptions,
|
||||
orphanDeleteStrategy,
|
||||
false,
|
||||
[]string{"foo.com/x", api.FinalizerOrphan, "bar.com/y"},
|
||||
[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"},
|
||||
},
|
||||
{
|
||||
podWithOtherFinalizers("pod11"),
|
||||
@@ -928,7 +939,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
nilOrphanOptions,
|
||||
orphanDeleteStrategy,
|
||||
false,
|
||||
[]string{"foo.com/x", "bar.com/y", api.FinalizerOrphan},
|
||||
[]string{"foo.com/x", "bar.com/y", metav1.FinalizerOrphan},
|
||||
},
|
||||
{
|
||||
podWithNoFinalizer("pod13"),
|
||||
@@ -942,21 +953,21 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
nilOrphanOptions,
|
||||
orphanDeleteStrategy,
|
||||
false,
|
||||
[]string{api.FinalizerOrphan},
|
||||
[]string{metav1.FinalizerOrphan},
|
||||
},
|
||||
{
|
||||
podWithOnlyOrphanFinalizer("pod15"),
|
||||
nilOrphanOptions,
|
||||
defaultDeleteStrategy,
|
||||
false,
|
||||
[]string{api.FinalizerOrphan},
|
||||
[]string{metav1.FinalizerOrphan},
|
||||
},
|
||||
{
|
||||
podWithOnlyOrphanFinalizer("pod16"),
|
||||
nilOrphanOptions,
|
||||
orphanDeleteStrategy,
|
||||
false,
|
||||
[]string{api.FinalizerOrphan},
|
||||
[]string{metav1.FinalizerOrphan},
|
||||
},
|
||||
|
||||
// cases run with nil DeleteOptions should have exact same behavior.
|
||||
@@ -967,14 +978,14 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
nil,
|
||||
defaultDeleteStrategy,
|
||||
false,
|
||||
[]string{"foo.com/x", api.FinalizerOrphan, "bar.com/y"},
|
||||
[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"},
|
||||
},
|
||||
{
|
||||
podWithOrphanFinalizer("pod18"),
|
||||
nil,
|
||||
orphanDeleteStrategy,
|
||||
false,
|
||||
[]string{"foo.com/x", api.FinalizerOrphan, "bar.com/y"},
|
||||
[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"},
|
||||
},
|
||||
{
|
||||
podWithOtherFinalizers("pod19"),
|
||||
@@ -988,7 +999,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
nil,
|
||||
orphanDeleteStrategy,
|
||||
false,
|
||||
[]string{"foo.com/x", "bar.com/y", api.FinalizerOrphan},
|
||||
[]string{"foo.com/x", "bar.com/y", metav1.FinalizerOrphan},
|
||||
},
|
||||
{
|
||||
podWithNoFinalizer("pod21"),
|
||||
@@ -1002,21 +1013,21 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
nil,
|
||||
orphanDeleteStrategy,
|
||||
false,
|
||||
[]string{api.FinalizerOrphan},
|
||||
[]string{metav1.FinalizerOrphan},
|
||||
},
|
||||
{
|
||||
podWithOnlyOrphanFinalizer("pod23"),
|
||||
nil,
|
||||
defaultDeleteStrategy,
|
||||
false,
|
||||
[]string{api.FinalizerOrphan},
|
||||
[]string{metav1.FinalizerOrphan},
|
||||
},
|
||||
{
|
||||
podWithOnlyOrphanFinalizer("pod24"),
|
||||
nil,
|
||||
orphanDeleteStrategy,
|
||||
false,
|
||||
[]string{api.FinalizerOrphan},
|
||||
[]string{metav1.FinalizerOrphan},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1044,7 +1055,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
if !tc.expectNotFound {
|
||||
pod, ok := obj.(*api.Pod)
|
||||
pod, ok := obj.(*example.Pod)
|
||||
if !ok {
|
||||
t.Fatalf("Expect the object to be a pod, but got %#v", obj)
|
||||
}
|
||||
@@ -1065,8 +1076,8 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestStoreDeleteCollection(t *testing.T) {
|
||||
podA := &api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}}
|
||||
podB := &api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}}
|
||||
podA := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}}
|
||||
podB := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
destroyFunc, registry := NewTestGenericStoreRegistry(t)
|
||||
@@ -1084,7 +1095,7 @@ func TestStoreDeleteCollection(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
deletedPods := deleted.(*api.PodList)
|
||||
deletedPods := deleted.(*example.PodList)
|
||||
if len(deletedPods.Items) != 2 {
|
||||
t.Errorf("Unexpected number of pods deleted: %d, expected: 2", len(deletedPods.Items))
|
||||
}
|
||||
@@ -1103,8 +1114,8 @@ func TestStoreDeleteCollectionNotFound(t *testing.T) {
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
|
||||
podA := &api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}}
|
||||
podB := &api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}}
|
||||
podA := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}}
|
||||
podB := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}}
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
// Setup
|
||||
@@ -1141,7 +1152,7 @@ func TestStoreDeleteCollectionNotFound(t *testing.T) {
|
||||
// Test whether objects deleted with DeleteCollection are correctly delivered
|
||||
// to watchers.
|
||||
func TestStoreDeleteCollectionWithWatch(t *testing.T) {
|
||||
podA := &api.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}}
|
||||
podA := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}}
|
||||
|
||||
testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test")
|
||||
destroyFunc, registry := NewTestGenericStoreRegistry(t)
|
||||
@@ -1151,7 +1162,7 @@ func TestStoreDeleteCollectionWithWatch(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error: %v", err)
|
||||
}
|
||||
podCreated := objCreated.(*api.Pod)
|
||||
podCreated := objCreated.(*example.Pod)
|
||||
|
||||
watcher, err := registry.WatchPredicate(testContext, matchPodName("foo"), podCreated.ResourceVersion)
|
||||
if err != nil {
|
||||
@@ -1170,7 +1181,7 @@ func TestStoreDeleteCollectionWithWatch(t *testing.T) {
|
||||
if got.Type != "DELETED" {
|
||||
t.Errorf("Unexpected event type: %s", got.Type)
|
||||
}
|
||||
gotObject := got.Object.(*api.Pod)
|
||||
gotObject := got.Object.(*example.Pod)
|
||||
gotObject.ResourceVersion = podCreated.ResourceVersion
|
||||
if e, a := podCreated, gotObject; !reflect.DeepEqual(e, a) {
|
||||
t.Errorf("Expected: %#v, got: %#v", e, a)
|
||||
@@ -1203,12 +1214,12 @@ func TestStoreWatch(t *testing.T) {
|
||||
if m.context != nil {
|
||||
ctx = m.context
|
||||
}
|
||||
podA := &api.Pod{
|
||||
podA := &example.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "foo",
|
||||
Namespace: "test",
|
||||
},
|
||||
Spec: api.PodSpec{NodeName: "machine"},
|
||||
Spec: example.PodSpec{NodeName: "machine"},
|
||||
}
|
||||
|
||||
destroyFunc, registry := NewTestGenericStoreRegistry(t)
|
||||
@@ -1233,12 +1244,12 @@ func TestStoreWatch(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func newTestGenericStoreRegistry(t *testing.T, hasCacheEnabled bool) (factory.DestroyFunc, *Store) {
|
||||
func newTestGenericStoreRegistry(t *testing.T, scheme *runtime.Scheme, hasCacheEnabled bool) (factory.DestroyFunc, *Store) {
|
||||
podPrefix := "/pods"
|
||||
server, sc := etcdtesting.NewUnsecuredEtcd3TestClientServer(t, api.Scheme)
|
||||
strategy := &testRESTStrategy{api.Scheme, names.SimpleNameGenerator, true, false, true}
|
||||
server, sc := etcdtesting.NewUnsecuredEtcd3TestClientServer(t, scheme)
|
||||
strategy := &testRESTStrategy{scheme, names.SimpleNameGenerator, true, false, true}
|
||||
|
||||
sc.Codec = testapi.Default.StorageCodec()
|
||||
sc.Codec = apitesting.TestStorageCodec(codecs, examplev1.SchemeGroupVersion)
|
||||
s, dFunc, err := factory.Create(*sc)
|
||||
if err != nil {
|
||||
t.Fatalf("Error creating storage: %v", err)
|
||||
@@ -1252,12 +1263,12 @@ func newTestGenericStoreRegistry(t *testing.T, hasCacheEnabled bool) (factory.De
|
||||
CacheCapacity: 10,
|
||||
Storage: s,
|
||||
Versioner: etcdstorage.APIObjectVersioner{},
|
||||
Copier: api.Scheme,
|
||||
Type: &api.Pod{},
|
||||
Copier: scheme,
|
||||
Type: &example.Pod{},
|
||||
ResourcePrefix: podPrefix,
|
||||
KeyFunc: func(obj runtime.Object) (string, error) { return storage.NoNamespaceKeyFunc(podPrefix, obj) },
|
||||
GetAttrsFunc: getPodAttrs,
|
||||
NewListFunc: func() runtime.Object { return &api.PodList{} },
|
||||
NewListFunc: func() runtime.Object { return &example.PodList{} },
|
||||
Codec: sc.Codec,
|
||||
}
|
||||
cacher := storage.NewCacherFromConfig(config)
|
||||
@@ -1270,10 +1281,10 @@ func newTestGenericStoreRegistry(t *testing.T, hasCacheEnabled bool) (factory.De
|
||||
}
|
||||
|
||||
return destroyFunc, &Store{
|
||||
Copier: api.Scheme,
|
||||
NewFunc: func() runtime.Object { return &api.Pod{} },
|
||||
NewListFunc: func() runtime.Object { return &api.PodList{} },
|
||||
QualifiedResource: api.Resource("pods"),
|
||||
Copier: scheme,
|
||||
NewFunc: func() runtime.Object { return &example.Pod{} },
|
||||
NewListFunc: func() runtime.Object { return &example.PodList{} },
|
||||
QualifiedResource: example.Resource("pods"),
|
||||
CreateStrategy: strategy,
|
||||
UpdateStrategy: strategy,
|
||||
DeleteStrategy: strategy,
|
||||
@@ -1286,13 +1297,13 @@ func newTestGenericStoreRegistry(t *testing.T, hasCacheEnabled bool) (factory.De
|
||||
}
|
||||
return path.Join(podPrefix, id), nil
|
||||
},
|
||||
ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*api.Pod).Name, nil },
|
||||
ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*example.Pod).Name, nil },
|
||||
PredicateFunc: func(label labels.Selector, field fields.Selector) storage.SelectionPredicate {
|
||||
return storage.SelectionPredicate{
|
||||
Label: label,
|
||||
Field: field,
|
||||
GetAttrs: func(obj runtime.Object) (labels.Set, fields.Set, error) {
|
||||
pod, ok := obj.(*api.Pod)
|
||||
pod, ok := obj.(*example.Pod)
|
||||
if !ok {
|
||||
return nil, nil, fmt.Errorf("not a pod")
|
||||
}
|
||||
|
||||
@@ -19,9 +19,6 @@ go_test(
|
||||
library = ":go_default_library",
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/testapi:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/client/clientset_generated/clientset:go_default_library",
|
||||
"//pkg/generated/openapi:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
@@ -30,6 +27,8 @@ go_test(
|
||||
"//vendor:github.com/stretchr/testify/assert",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/meta",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apimachinery",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apimachinery/announced",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apimachinery/registered",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
||||
@@ -37,12 +36,16 @@ go_test(
|
||||
"//vendor:k8s.io/apimachinery/pkg/util/net",
|
||||
"//vendor:k8s.io/apimachinery/pkg/util/sets",
|
||||
"//vendor:k8s.io/apimachinery/pkg/version",
|
||||
"//vendor:k8s.io/apiserver/pkg/apis/example",
|
||||
"//vendor:k8s.io/apiserver/pkg/apis/example/install",
|
||||
"//vendor:k8s.io/apiserver/pkg/apis/example/v1",
|
||||
"//vendor:k8s.io/apiserver/pkg/authentication/user",
|
||||
"//vendor:k8s.io/apiserver/pkg/authorization/authorizer",
|
||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||
"//vendor:k8s.io/apiserver/pkg/server/options",
|
||||
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||
"//vendor:k8s.io/apiserver/pkg/util/flag",
|
||||
"//vendor:k8s.io/client-go/pkg/api",
|
||||
"//vendor:k8s.io/client-go/util/cert",
|
||||
],
|
||||
)
|
||||
@@ -64,7 +67,6 @@ go_library(
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/genericapiserver/endpoints:go_default_library",
|
||||
"//pkg/genericapiserver/endpoints/filters:go_default_library",
|
||||
"//pkg/genericapiserver/endpoints/openapi:go_default_library",
|
||||
@@ -80,10 +82,12 @@ go_library(
|
||||
"//vendor:github.com/pkg/errors",
|
||||
"//vendor:gopkg.in/natefinch/lumberjack.v2",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apimachinery",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apimachinery/registered",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/openapi",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime/serializer",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
|
||||
"//vendor:k8s.io/apimachinery/pkg/util/net",
|
||||
"//vendor:k8s.io/apimachinery/pkg/util/runtime",
|
||||
|
||||
@@ -39,6 +39,7 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
openapicommon "k8s.io/apimachinery/pkg/openapi"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apimachinery/pkg/version"
|
||||
"k8s.io/apiserver/pkg/admission"
|
||||
@@ -55,7 +56,6 @@ import (
|
||||
"k8s.io/apiserver/pkg/server/options"
|
||||
restclient "k8s.io/client-go/rest"
|
||||
certutil "k8s.io/client-go/util/cert"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
genericapifilters "k8s.io/kubernetes/pkg/genericapiserver/endpoints/filters"
|
||||
apiopenapi "k8s.io/kubernetes/pkg/genericapiserver/endpoints/openapi"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/server/mux"
|
||||
@@ -192,7 +192,6 @@ type SecureServingInfo struct {
|
||||
// NewConfig returns a Config struct with the default values
|
||||
func NewConfig() *Config {
|
||||
config := &Config{
|
||||
Serializer: api.Codecs,
|
||||
ReadWritePort: 6443,
|
||||
RequestContextMapper: apirequest.NewRequestContextMapper(),
|
||||
BuildHandlerChainsFunc: DefaultBuildHandlerChain,
|
||||
@@ -213,8 +212,13 @@ func NewConfig() *Config {
|
||||
return config.ApplyOptions(defaultOptions)
|
||||
}
|
||||
|
||||
func DefaultOpenAPIConfig(getDefinitions openapicommon.GetOpenAPIDefinitions) *openapicommon.Config {
|
||||
defNamer := apiopenapi.NewDefinitionNamer(api.Scheme)
|
||||
func (c *Config) WithSerializer(codecs serializer.CodecFactory) *Config {
|
||||
c.Serializer = codecs
|
||||
return c
|
||||
}
|
||||
|
||||
func DefaultOpenAPIConfig(getDefinitions openapicommon.GetOpenAPIDefinitions, scheme *runtime.Scheme) *openapicommon.Config {
|
||||
defNamer := apiopenapi.NewDefinitionNamer(scheme)
|
||||
return &openapicommon.Config{
|
||||
ProtocolList: []string{"https"},
|
||||
IgnorePrefixes: []string{"/swaggerapi"},
|
||||
|
||||
@@ -31,17 +31,18 @@ import (
|
||||
"github.com/golang/glog"
|
||||
|
||||
"k8s.io/apimachinery/pkg/apimachinery"
|
||||
"k8s.io/apimachinery/pkg/apimachinery/registered"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
openapicommon "k8s.io/apimachinery/pkg/openapi"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apiserver/pkg/admission"
|
||||
apirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/server/healthz"
|
||||
restclient "k8s.io/client-go/rest"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
genericapi "k8s.io/kubernetes/pkg/genericapiserver/endpoints"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
genericmux "k8s.io/kubernetes/pkg/genericapiserver/server/mux"
|
||||
@@ -376,15 +377,15 @@ func (s *GenericAPIServer) DynamicApisDiscovery() *restful.WebService {
|
||||
|
||||
// NewDefaultAPIGroupInfo returns an APIGroupInfo stubbed with "normal" values
|
||||
// exposed for easier composition from other packages
|
||||
func NewDefaultAPIGroupInfo(group string) APIGroupInfo {
|
||||
groupMeta := api.Registry.GroupOrDie(group)
|
||||
func NewDefaultAPIGroupInfo(group string, registry *registered.APIRegistrationManager, scheme *runtime.Scheme, parameterCodec runtime.ParameterCodec, codecs serializer.CodecFactory) APIGroupInfo {
|
||||
groupMeta := registry.GroupOrDie(group)
|
||||
|
||||
return APIGroupInfo{
|
||||
GroupMeta: *groupMeta,
|
||||
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{},
|
||||
OptionsExternalVersion: &api.Registry.GroupOrDie(api.GroupName).GroupVersion,
|
||||
Scheme: api.Scheme,
|
||||
ParameterCodec: api.ParameterCodec,
|
||||
NegotiatedSerializer: api.Codecs,
|
||||
OptionsExternalVersion: ®istry.GroupOrDie("").GroupVersion,
|
||||
Scheme: scheme,
|
||||
ParameterCodec: parameterCodec,
|
||||
NegotiatedSerializer: codecs,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,10 +41,12 @@ import (
|
||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apimachinery/pkg/version"
|
||||
"k8s.io/apiserver/pkg/apis/example"
|
||||
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
|
||||
"k8s.io/apiserver/pkg/authentication/user"
|
||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/kubernetes/pkg/api/testapi"
|
||||
"k8s.io/client-go/pkg/api"
|
||||
openapigen "k8s.io/kubernetes/pkg/generated/openapi"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
|
||||
@@ -71,18 +73,20 @@ func init() {
|
||||
&metav1.APIGroup{},
|
||||
&metav1.APIResourceList{},
|
||||
)
|
||||
example.AddToScheme(scheme)
|
||||
examplev1.AddToScheme(scheme)
|
||||
}
|
||||
|
||||
// setUp is a convience function for setting up for (most) tests.
|
||||
func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
|
||||
etcdServer, _ := etcdtesting.NewUnsecuredEtcd3TestClientServer(t, scheme)
|
||||
|
||||
config := NewConfig()
|
||||
config := NewConfig().WithSerializer(codecs)
|
||||
config.PublicAddress = net.ParseIP("192.168.10.4")
|
||||
config.RequestContextMapper = genericapirequest.NewRequestContextMapper()
|
||||
config.LegacyAPIGroupPrefixes = sets.NewString("/api")
|
||||
|
||||
config.OpenAPIConfig = DefaultOpenAPIConfig(openapigen.GetOpenAPIDefinitions)
|
||||
config.OpenAPIConfig = DefaultOpenAPIConfig(openapigen.GetOpenAPIDefinitions, api.Scheme)
|
||||
config.OpenAPIConfig.Info = &spec.Info{
|
||||
InfoProps: spec.InfoProps{
|
||||
Title: "Kubernetes",
|
||||
@@ -483,8 +487,8 @@ func TestDiscoveryAtAPIS(t *testing.T) {
|
||||
// Add a Group.
|
||||
extensionsVersions := []metav1.GroupVersionForDiscovery{
|
||||
{
|
||||
GroupVersion: testapi.Extensions.GroupVersion().String(),
|
||||
Version: testapi.Extensions.GroupVersion().Version,
|
||||
GroupVersion: examplev1.SchemeGroupVersion.String(),
|
||||
Version: examplev1.SchemeGroupVersion.Version,
|
||||
},
|
||||
}
|
||||
extensionsPreferredVersion := metav1.GroupVersionForDiscovery{
|
||||
|
||||
@@ -17,9 +17,9 @@ limitations under the License.
|
||||
package server
|
||||
|
||||
import (
|
||||
"k8s.io/apimachinery/pkg/apimachinery/registered"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
)
|
||||
|
||||
type ResourceEncodingConfig interface {
|
||||
@@ -33,7 +33,8 @@ type ResourceEncodingConfig interface {
|
||||
}
|
||||
|
||||
type DefaultResourceEncodingConfig struct {
|
||||
Groups map[string]*GroupResourceEncodingConfig
|
||||
groups map[string]*GroupResourceEncodingConfig
|
||||
registry *registered.APIRegistrationManager
|
||||
}
|
||||
|
||||
type GroupResourceEncodingConfig struct {
|
||||
@@ -46,8 +47,8 @@ type GroupResourceEncodingConfig struct {
|
||||
|
||||
var _ ResourceEncodingConfig = &DefaultResourceEncodingConfig{}
|
||||
|
||||
func NewDefaultResourceEncodingConfig() *DefaultResourceEncodingConfig {
|
||||
return &DefaultResourceEncodingConfig{Groups: map[string]*GroupResourceEncodingConfig{}}
|
||||
func NewDefaultResourceEncodingConfig(registry *registered.APIRegistrationManager) *DefaultResourceEncodingConfig {
|
||||
return &DefaultResourceEncodingConfig{groups: map[string]*GroupResourceEncodingConfig{}, registry: registry}
|
||||
}
|
||||
|
||||
func newGroupResourceEncodingConfig(defaultEncoding, defaultInternalVersion schema.GroupVersion) *GroupResourceEncodingConfig {
|
||||
@@ -58,33 +59,33 @@ func newGroupResourceEncodingConfig(defaultEncoding, defaultInternalVersion sche
|
||||
}
|
||||
|
||||
func (o *DefaultResourceEncodingConfig) SetVersionEncoding(group string, externalEncodingVersion, internalVersion schema.GroupVersion) {
|
||||
_, groupExists := o.Groups[group]
|
||||
_, groupExists := o.groups[group]
|
||||
if !groupExists {
|
||||
o.Groups[group] = newGroupResourceEncodingConfig(externalEncodingVersion, internalVersion)
|
||||
o.groups[group] = newGroupResourceEncodingConfig(externalEncodingVersion, internalVersion)
|
||||
}
|
||||
|
||||
o.Groups[group].DefaultExternalEncoding = externalEncodingVersion
|
||||
o.Groups[group].DefaultInternalEncoding = internalVersion
|
||||
o.groups[group].DefaultExternalEncoding = externalEncodingVersion
|
||||
o.groups[group].DefaultInternalEncoding = internalVersion
|
||||
}
|
||||
|
||||
func (o *DefaultResourceEncodingConfig) SetResourceEncoding(resourceBeingStored schema.GroupResource, externalEncodingVersion, internalVersion schema.GroupVersion) {
|
||||
group := resourceBeingStored.Group
|
||||
_, groupExists := o.Groups[group]
|
||||
_, groupExists := o.groups[group]
|
||||
if !groupExists {
|
||||
o.Groups[group] = newGroupResourceEncodingConfig(externalEncodingVersion, internalVersion)
|
||||
o.groups[group] = newGroupResourceEncodingConfig(externalEncodingVersion, internalVersion)
|
||||
}
|
||||
|
||||
o.Groups[group].ExternalResourceEncodings[resourceBeingStored.Resource] = externalEncodingVersion
|
||||
o.Groups[group].InternalResourceEncodings[resourceBeingStored.Resource] = internalVersion
|
||||
o.groups[group].ExternalResourceEncodings[resourceBeingStored.Resource] = externalEncodingVersion
|
||||
o.groups[group].InternalResourceEncodings[resourceBeingStored.Resource] = internalVersion
|
||||
}
|
||||
|
||||
func (o *DefaultResourceEncodingConfig) StorageEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) {
|
||||
groupMeta, err := api.Registry.Group(resource.Group)
|
||||
groupMeta, err := o.registry.Group(resource.Group)
|
||||
if err != nil {
|
||||
return schema.GroupVersion{}, err
|
||||
}
|
||||
|
||||
groupEncoding, groupExists := o.Groups[resource.Group]
|
||||
groupEncoding, groupExists := o.groups[resource.Group]
|
||||
|
||||
if !groupExists {
|
||||
// return the most preferred external version for the group
|
||||
@@ -100,11 +101,11 @@ func (o *DefaultResourceEncodingConfig) StorageEncodingFor(resource schema.Group
|
||||
}
|
||||
|
||||
func (o *DefaultResourceEncodingConfig) InMemoryEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) {
|
||||
if _, err := api.Registry.Group(resource.Group); err != nil {
|
||||
if _, err := o.registry.Group(resource.Group); err != nil {
|
||||
return schema.GroupVersion{}, err
|
||||
}
|
||||
|
||||
groupEncoding, groupExists := o.Groups[resource.Group]
|
||||
groupEncoding, groupExists := o.groups[resource.Group]
|
||||
if !groupExists {
|
||||
return schema.GroupVersion{Group: resource.Group, Version: runtime.APIVersionInternal}, nil
|
||||
}
|
||||
|
||||
@@ -17,17 +17,30 @@ limitations under the License.
|
||||
package server
|
||||
|
||||
import (
|
||||
"os"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"k8s.io/apimachinery/pkg/apimachinery/announced"
|
||||
"k8s.io/apimachinery/pkg/apimachinery/registered"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apiserver/pkg/apis/example"
|
||||
exampleinstall "k8s.io/apiserver/pkg/apis/example/install"
|
||||
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
|
||||
"k8s.io/apiserver/pkg/server/options"
|
||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||
)
|
||||
|
||||
var (
|
||||
registry = registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS"))
|
||||
announce = make(announced.APIGroupFactoryRegistry)
|
||||
)
|
||||
|
||||
func init() {
|
||||
exampleinstall.Install(announce, registry, scheme)
|
||||
}
|
||||
|
||||
type fakeNegotiater struct {
|
||||
serializer, streamSerializer runtime.Serializer
|
||||
framer runtime.Framer
|
||||
@@ -66,18 +79,18 @@ func (n *fakeNegotiater) DecoderToVersion(serializer runtime.Decoder, gv runtime
|
||||
|
||||
func TestDefaultStorageFactory(t *testing.T) {
|
||||
ns := &fakeNegotiater{types: []string{"test/test"}}
|
||||
f := NewDefaultStorageFactory(storagebackend.Config{}, "test/test", ns, NewDefaultResourceEncodingConfig(), NewResourceConfig())
|
||||
f.AddCohabitatingResources(schema.GroupResource{Resource: "test"}, schema.GroupResource{Resource: "test2", Group: "2"})
|
||||
f := NewDefaultStorageFactory(storagebackend.Config{}, "test/test", ns, NewDefaultResourceEncodingConfig(registry), NewResourceConfig())
|
||||
f.AddCohabitatingResources(example.Resource("test"), schema.GroupResource{Resource: "test2", Group: "2"})
|
||||
called := false
|
||||
testEncoderChain := func(e runtime.Encoder) runtime.Encoder {
|
||||
called = true
|
||||
return e
|
||||
}
|
||||
f.AddSerializationChains(testEncoderChain, nil, schema.GroupResource{Resource: "test"})
|
||||
f.SetEtcdLocation(schema.GroupResource{Resource: "*"}, []string{"/server2"})
|
||||
f.SetEtcdPrefix(schema.GroupResource{Resource: "test"}, "/prefix_for_test")
|
||||
f.AddSerializationChains(testEncoderChain, nil, example.Resource("test"))
|
||||
f.SetEtcdLocation(example.Resource("*"), []string{"/server2"})
|
||||
f.SetEtcdPrefix(example.Resource("test"), "/prefix_for_test")
|
||||
|
||||
config, err := f.NewConfig(schema.GroupResource{Resource: "test"})
|
||||
config, err := f.NewConfig(example.Resource("test"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -90,20 +103,24 @@ func TestDefaultStorageFactory(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestUpdateEtcdOverrides(t *testing.T) {
|
||||
registry := registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS"))
|
||||
announced := make(announced.APIGroupFactoryRegistry)
|
||||
exampleinstall.Install(announced, registry, scheme)
|
||||
|
||||
testCases := []struct {
|
||||
resource schema.GroupResource
|
||||
servers []string
|
||||
}{
|
||||
{
|
||||
resource: schema.GroupResource{Group: api.GroupName, Resource: "resource"},
|
||||
resource: schema.GroupResource{Group: example.GroupName, Resource: "resource"},
|
||||
servers: []string{"http://127.0.0.1:10000"},
|
||||
},
|
||||
{
|
||||
resource: schema.GroupResource{Group: api.GroupName, Resource: "resource"},
|
||||
resource: schema.GroupResource{Group: example.GroupName, Resource: "resource"},
|
||||
servers: []string{"http://127.0.0.1:10000", "http://127.0.0.1:20000"},
|
||||
},
|
||||
{
|
||||
resource: schema.GroupResource{Group: extensions.GroupName, Resource: "resource"},
|
||||
resource: schema.GroupResource{Group: example.GroupName, Resource: "resource"},
|
||||
servers: []string{"http://127.0.0.1:10000"},
|
||||
},
|
||||
}
|
||||
@@ -115,7 +132,7 @@ func TestUpdateEtcdOverrides(t *testing.T) {
|
||||
ServerList: defaultEtcdLocation,
|
||||
Copier: scheme,
|
||||
}
|
||||
storageFactory := NewDefaultStorageFactory(defaultConfig, "", api.Codecs, NewDefaultResourceEncodingConfig(), NewResourceConfig())
|
||||
storageFactory := NewDefaultStorageFactory(defaultConfig, "", codecs, NewDefaultResourceEncodingConfig(registry), NewResourceConfig())
|
||||
storageFactory.SetEtcdLocation(test.resource, test.servers)
|
||||
|
||||
var err error
|
||||
@@ -129,7 +146,7 @@ func TestUpdateEtcdOverrides(t *testing.T) {
|
||||
continue
|
||||
}
|
||||
|
||||
config, err = storageFactory.NewConfig(schema.GroupResource{Group: api.GroupName, Resource: "unlikely"})
|
||||
config, err = storageFactory.NewConfig(schema.GroupResource{Group: examplev1.GroupName, Resource: "unlikely"})
|
||||
if err != nil {
|
||||
t.Errorf("%d: unexpected error %v", i, err)
|
||||
continue
|
||||
|
||||
@@ -27,6 +27,7 @@ import (
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
openapigen "k8s.io/kubernetes/pkg/generated/openapi"
|
||||
genericapiserver "k8s.io/kubernetes/pkg/genericapiserver/server"
|
||||
|
||||
@@ -43,7 +44,7 @@ func TestValidOpenAPISpec(t *testing.T) {
|
||||
defer etcdserver.Terminate(t)
|
||||
|
||||
config.GenericConfig.EnableIndex = true
|
||||
config.GenericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(openapigen.GetOpenAPIDefinitions)
|
||||
config.GenericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(openapigen.GetOpenAPIDefinitions, api.Scheme)
|
||||
config.GenericConfig.OpenAPIConfig.Info = &spec.Info{
|
||||
InfoProps: spec.InfoProps{
|
||||
Title: "Kubernetes",
|
||||
|
||||
@@ -62,13 +62,13 @@ func setUp(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.
|
||||
server, storageConfig := etcdtesting.NewUnsecuredEtcd3TestClientServer(t, api.Scheme)
|
||||
|
||||
config := &Config{
|
||||
GenericConfig: genericapiserver.NewConfig(),
|
||||
GenericConfig: genericapiserver.NewConfig().WithSerializer(api.Codecs),
|
||||
APIResourceConfigSource: DefaultAPIResourceConfigSource(),
|
||||
APIServerServicePort: 443,
|
||||
MasterCount: 1,
|
||||
}
|
||||
|
||||
resourceEncoding := genericapiserver.NewDefaultResourceEncodingConfig()
|
||||
resourceEncoding := genericapiserver.NewDefaultResourceEncodingConfig(api.Registry)
|
||||
resourceEncoding.SetVersionEncoding(api.GroupName, api.Registry.GroupOrDie(api.GroupName).GroupVersion, schema.GroupVersion{Group: api.GroupName, Version: runtime.APIVersionInternal})
|
||||
resourceEncoding.SetVersionEncoding(autoscaling.GroupName, *testapi.Autoscaling.GroupVersion(), schema.GroupVersion{Group: autoscaling.GroupName, Version: runtime.APIVersionInternal})
|
||||
resourceEncoding.SetVersionEncoding(batch.GroupName, *testapi.Batch.GroupVersion(), schema.GroupVersion{Group: batch.GroupName, Version: runtime.APIVersionInternal})
|
||||
|
||||
@@ -38,6 +38,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/apps/petset:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||
|
||||
@@ -26,6 +26,7 @@ import (
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/apps/petset"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
)
|
||||
|
||||
// rest implements a RESTStorage for replication controllers against etcd
|
||||
@@ -44,6 +45,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: petset.MatchStatefulSet,
|
||||
QualifiedResource: appsapi.Resource("statefulsets"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("statefulsets"),
|
||||
|
||||
CreateStrategy: petset.Strategy,
|
||||
UpdateStrategy: petset.Strategy,
|
||||
|
||||
@@ -12,6 +12,7 @@ go_library(
|
||||
srcs = ["storage_apps.go"],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/apps:go_default_library",
|
||||
"//pkg/apis/apps/v1beta1:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
|
||||
@@ -17,6 +17,7 @@ limitations under the License.
|
||||
package rest
|
||||
|
||||
import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/apps"
|
||||
appsapiv1beta1 "k8s.io/kubernetes/pkg/apis/apps/v1beta1"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
@@ -28,7 +29,7 @@ import (
|
||||
type RESTStorageProvider struct{}
|
||||
|
||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apps.GroupName)
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apps.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||
|
||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(appsapiv1beta1.SchemeGroupVersion) {
|
||||
apiGroupInfo.VersionedResourcesStorageMap[appsapiv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter)
|
||||
|
||||
@@ -12,6 +12,7 @@ go_library(
|
||||
srcs = ["storage_authentication.go"],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/authentication:go_default_library",
|
||||
"//pkg/apis/authentication/v1beta1:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
|
||||
@@ -18,6 +18,7 @@ package rest
|
||||
|
||||
import (
|
||||
"k8s.io/apiserver/pkg/authentication/authenticator"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/authentication"
|
||||
authenticationv1beta1 "k8s.io/kubernetes/pkg/apis/authentication/v1beta1"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
@@ -36,7 +37,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
||||
// return genericapiserver.APIGroupInfo{}, false
|
||||
// }
|
||||
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(authentication.GroupName)
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(authentication.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||
|
||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(authenticationv1beta1.SchemeGroupVersion) {
|
||||
apiGroupInfo.VersionedResourcesStorageMap[authenticationv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter)
|
||||
|
||||
@@ -12,6 +12,7 @@ go_library(
|
||||
srcs = ["storage_authorization.go"],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/authorization:go_default_library",
|
||||
"//pkg/apis/authorization/v1beta1:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
|
||||
@@ -18,6 +18,7 @@ package rest
|
||||
|
||||
import (
|
||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/authorization"
|
||||
authorizationv1beta1 "k8s.io/kubernetes/pkg/apis/authorization/v1beta1"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
@@ -37,7 +38,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
||||
return genericapiserver.APIGroupInfo{}, false
|
||||
}
|
||||
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(authorization.GroupName)
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(authorization.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||
|
||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(authorizationv1beta1.SchemeGroupVersion) {
|
||||
apiGroupInfo.VersionedResourcesStorageMap[authorizationv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter)
|
||||
|
||||
@@ -37,6 +37,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/autoscaling/horizontalpodautoscaler:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||
|
||||
@@ -26,6 +26,7 @@ import (
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
)
|
||||
|
||||
type REST struct {
|
||||
@@ -43,6 +44,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: horizontalpodautoscaler.MatchAutoscaler,
|
||||
QualifiedResource: autoscaling.Resource("horizontalpodautoscalers"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("horizontalpodautoscalers"),
|
||||
|
||||
CreateStrategy: horizontalpodautoscaler.Strategy,
|
||||
UpdateStrategy: horizontalpodautoscaler.Strategy,
|
||||
|
||||
@@ -12,6 +12,7 @@ go_library(
|
||||
srcs = ["storage_autoscaling.go"],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/autoscaling:go_default_library",
|
||||
"//pkg/apis/autoscaling/v1:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
|
||||
@@ -17,6 +17,7 @@ limitations under the License.
|
||||
package rest
|
||||
|
||||
import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
||||
autoscalingapiv1 "k8s.io/kubernetes/pkg/apis/autoscaling/v1"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
@@ -28,7 +29,7 @@ import (
|
||||
type RESTStorageProvider struct{}
|
||||
|
||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(autoscaling.GroupName)
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(autoscaling.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||
|
||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(autoscalingapiv1.SchemeGroupVersion) {
|
||||
apiGroupInfo.VersionedResourcesStorageMap[autoscalingapiv1.SchemeGroupVersion.Version] = p.v1Storage(apiResourceConfigSource, restOptionsGetter)
|
||||
|
||||
@@ -39,6 +39,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/batch/cronjob:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||
|
||||
@@ -26,6 +26,7 @@ import (
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/batch/cronjob"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
)
|
||||
|
||||
// REST implements a RESTStorage for scheduled jobs against etcd
|
||||
@@ -44,6 +45,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: cronjob.MatchCronJob,
|
||||
QualifiedResource: batch.Resource("cronjobs"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("cronjobs"),
|
||||
|
||||
CreateStrategy: cronjob.Strategy,
|
||||
UpdateStrategy: cronjob.Strategy,
|
||||
|
||||
@@ -37,6 +37,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/batch/job:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||
|
||||
@@ -26,6 +26,7 @@ import (
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/batch/job"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
)
|
||||
|
||||
// JobStorage includes dummy storage for Job.
|
||||
@@ -59,6 +60,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: job.MatchJob,
|
||||
QualifiedResource: batch.Resource("jobs"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("jobs"),
|
||||
|
||||
CreateStrategy: job.Strategy,
|
||||
UpdateStrategy: job.Strategy,
|
||||
|
||||
@@ -12,6 +12,7 @@ go_library(
|
||||
srcs = ["storage_batch.go"],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/batch:go_default_library",
|
||||
"//pkg/apis/batch/v1:go_default_library",
|
||||
"//pkg/apis/batch/v2alpha1:go_default_library",
|
||||
|
||||
@@ -18,6 +18,7 @@ package rest
|
||||
|
||||
import (
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/batch"
|
||||
batchapiv1 "k8s.io/kubernetes/pkg/apis/batch/v1"
|
||||
batchapiv2alpha1 "k8s.io/kubernetes/pkg/apis/batch/v2alpha1"
|
||||
@@ -31,7 +32,7 @@ import (
|
||||
type RESTStorageProvider struct{}
|
||||
|
||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(batch.GroupName)
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(batch.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||
|
||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(batchapiv2alpha1.SchemeGroupVersion) {
|
||||
apiGroupInfo.VersionedResourcesStorageMap[batchapiv2alpha1.SchemeGroupVersion.Version] = p.v2alpha1Storage(apiResourceConfigSource, restOptionsGetter)
|
||||
|
||||
@@ -11,7 +11,10 @@ go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["cachesize.go"],
|
||||
tags = ["automanaged"],
|
||||
deps = ["//vendor:github.com/golang/glog"],
|
||||
deps = [
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//vendor:github.com/golang/glog",
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
|
||||
@@ -23,6 +23,8 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/golang/glog"
|
||||
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
)
|
||||
|
||||
type Resource string
|
||||
@@ -60,9 +62,6 @@ const (
|
||||
ServiceAccounts Resource = "serviceaccounts"
|
||||
Services Resource = "services"
|
||||
StorageClasses Resource = "storageclasses"
|
||||
|
||||
// Default value of watch cache size for a resource if not specified.
|
||||
defaultWatchCacheSize = 100
|
||||
)
|
||||
|
||||
// TODO: This shouldn't be a global variable.
|
||||
@@ -112,11 +111,11 @@ func SetWatchCacheSizes(cacheSizes []string) {
|
||||
}
|
||||
}
|
||||
|
||||
func GetWatchCacheSizeByResource(resource Resource) int { // TODO this should use schema.GroupResource for lookups
|
||||
if value, found := watchCacheSizes[resource]; found {
|
||||
func GetWatchCacheSizeByResource(resource string) int { // TODO this should use schema.GroupResource for lookups
|
||||
if value, found := watchCacheSizes[Resource(resource)]; found {
|
||||
return value
|
||||
}
|
||||
return defaultWatchCacheSize
|
||||
return registry.DefaultWatchCacheSize
|
||||
}
|
||||
|
||||
func maxInt(a, b int) int {
|
||||
|
||||
@@ -17,6 +17,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/certificates/certificates:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
csrregistry "k8s.io/kubernetes/pkg/registry/certificates/certificates"
|
||||
)
|
||||
|
||||
@@ -43,6 +44,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Approva
|
||||
},
|
||||
PredicateFunc: csrregistry.Matcher,
|
||||
QualifiedResource: certificates.Resource("certificatesigningrequests"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("certificatesigningrequests"),
|
||||
|
||||
CreateStrategy: csrregistry.Strategy,
|
||||
UpdateStrategy: csrregistry.Strategy,
|
||||
|
||||
@@ -12,6 +12,7 @@ go_library(
|
||||
srcs = ["storage_certificates.go"],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/certificates:go_default_library",
|
||||
"//pkg/apis/certificates/v1beta1:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
|
||||
@@ -17,6 +17,7 @@ limitations under the License.
|
||||
package rest
|
||||
|
||||
import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/apis/certificates"
|
||||
certificatesapiv1beta1 "k8s.io/kubernetes/pkg/apis/certificates/v1beta1"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
@@ -28,7 +29,7 @@ import (
|
||||
type RESTStorageProvider struct{}
|
||||
|
||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(certificates.GroupName)
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(certificates.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||
|
||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(certificatesapiv1beta1.SchemeGroupVersion) {
|
||||
apiGroupInfo.VersionedResourcesStorageMap[certificatesapiv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter)
|
||||
|
||||
@@ -33,6 +33,7 @@ go_library(
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/configmap:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
],
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/configmap"
|
||||
)
|
||||
|
||||
@@ -40,6 +41,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
||||
},
|
||||
PredicateFunc: configmap.MatchConfigMap,
|
||||
QualifiedResource: api.Resource("configmaps"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("configmaps"),
|
||||
|
||||
CreateStrategy: configmap.Strategy,
|
||||
UpdateStrategy: configmap.Strategy,
|
||||
|
||||
@@ -33,6 +33,7 @@ go_library(
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/endpoint:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
],
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/endpoint"
|
||||
)
|
||||
|
||||
@@ -39,6 +40,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
||||
},
|
||||
PredicateFunc: endpoint.MatchEndpoints,
|
||||
QualifiedResource: api.Resource("endpoints"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("endpoints"),
|
||||
|
||||
CreateStrategy: endpoint.Strategy,
|
||||
UpdateStrategy: endpoint.Strategy,
|
||||
|
||||
@@ -31,6 +31,7 @@ go_library(
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/event:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
],
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/event"
|
||||
)
|
||||
|
||||
@@ -52,6 +53,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter, ttl uint64) *REST {
|
||||
return ttl, nil
|
||||
},
|
||||
QualifiedResource: resource,
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource(resource.Resource),
|
||||
|
||||
CreateStrategy: event.Strategy,
|
||||
UpdateStrategy: event.Strategy,
|
||||
|
||||
@@ -34,6 +34,7 @@ go_library(
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/limitrange:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
],
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/limitrange"
|
||||
)
|
||||
|
||||
@@ -39,6 +40,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
||||
},
|
||||
PredicateFunc: limitrange.MatchLimitRange,
|
||||
QualifiedResource: api.Resource("limitranges"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("limitranges"),
|
||||
|
||||
CreateStrategy: limitrange.Strategy,
|
||||
UpdateStrategy: limitrange.Strategy,
|
||||
|
||||
@@ -31,11 +31,12 @@ go_library(
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/errors/storage:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/namespace:go_default_library",
|
||||
"//pkg/storage/errors:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/errors",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
|
||||
@@ -25,11 +25,12 @@ import (
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/storage"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
storageerr "k8s.io/kubernetes/pkg/api/errors/storage"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/namespace"
|
||||
storageerr "k8s.io/kubernetes/pkg/storage/errors"
|
||||
)
|
||||
|
||||
// rest implements a RESTStorage for namespaces
|
||||
@@ -59,6 +60,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Finaliz
|
||||
},
|
||||
PredicateFunc: namespace.MatchNamespace,
|
||||
QualifiedResource: api.Resource("namespaces"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("namespaces"),
|
||||
|
||||
CreateStrategy: namespace.Strategy,
|
||||
UpdateStrategy: namespace.Strategy,
|
||||
@@ -141,7 +143,7 @@ func (r *REST) Delete(ctx genericapirequest.Context, name string, options *metav
|
||||
newFinalizers := []string{}
|
||||
for i := range existingNamespace.ObjectMeta.Finalizers {
|
||||
finalizer := existingNamespace.ObjectMeta.Finalizers[i]
|
||||
if string(finalizer) != api.FinalizerOrphan {
|
||||
if string(finalizer) != metav1.FinalizerOrphan {
|
||||
newFinalizers = append(newFinalizers, finalizer)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/kubelet/client:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/node:go_default_library",
|
||||
"//pkg/registry/core/node/rest:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
|
||||
@@ -30,6 +30,7 @@ import (
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/kubelet/client"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/node"
|
||||
noderest "k8s.io/kubernetes/pkg/registry/core/node/rest"
|
||||
)
|
||||
@@ -79,6 +80,7 @@ func NewStorage(optsGetter generic.RESTOptionsGetter, kubeletClientConfig client
|
||||
},
|
||||
PredicateFunc: node.MatchNode,
|
||||
QualifiedResource: api.Resource("nodes"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("nodes"),
|
||||
|
||||
CreateStrategy: node.Strategy,
|
||||
UpdateStrategy: node.Strategy,
|
||||
|
||||
@@ -39,6 +39,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/persistentvolume:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/persistentvolume"
|
||||
)
|
||||
|
||||
@@ -42,6 +43,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: persistentvolume.MatchPersistentVolumes,
|
||||
QualifiedResource: api.Resource("persistentvolumes"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("persistentvolumes"),
|
||||
|
||||
CreateStrategy: persistentvolume.Strategy,
|
||||
UpdateStrategy: persistentvolume.Strategy,
|
||||
|
||||
@@ -39,6 +39,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/persistentvolumeclaim:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim"
|
||||
)
|
||||
|
||||
@@ -42,6 +43,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: persistentvolumeclaim.MatchPersistentVolumeClaim,
|
||||
QualifiedResource: api.Resource("persistentvolumeclaims"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("persistentvolumeclaims"),
|
||||
|
||||
CreateStrategy: persistentvolumeclaim.Strategy,
|
||||
UpdateStrategy: persistentvolumeclaim.Strategy,
|
||||
|
||||
@@ -15,11 +15,11 @@ go_test(
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/errors/storage:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/registrytest:go_default_library",
|
||||
"//pkg/securitycontext:go_default_library",
|
||||
"//pkg/storage/errors:go_default_library",
|
||||
"//pkg/storage/etcd/testing:go_default_library",
|
||||
"//vendor:golang.org/x/net/context",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/equality",
|
||||
@@ -43,7 +43,6 @@ go_library(
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/errors/storage:go_default_library",
|
||||
"//pkg/api/validation:go_default_library",
|
||||
"//pkg/apis/policy:go_default_library",
|
||||
"//pkg/client/clientset_generated/internalclientset/typed/policy/internalversion:go_default_library",
|
||||
@@ -52,8 +51,10 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/kubelet/client:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/pod:go_default_library",
|
||||
"//pkg/registry/core/pod/rest:go_default_library",
|
||||
"//pkg/storage/errors:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/errors",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/labels",
|
||||
|
||||
@@ -27,15 +27,16 @@ import (
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/storage"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
storeerr "k8s.io/kubernetes/pkg/api/errors/storage"
|
||||
"k8s.io/kubernetes/pkg/api/validation"
|
||||
policyclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/policy/internalversion"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/kubelet/client"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/pod"
|
||||
podrest "k8s.io/kubernetes/pkg/registry/core/pod/rest"
|
||||
storeerr "k8s.io/kubernetes/pkg/storage/errors"
|
||||
)
|
||||
|
||||
// PodStorage includes storage for pods and all sub resources
|
||||
@@ -68,6 +69,7 @@ func NewStorage(optsGetter generic.RESTOptionsGetter, k client.ConnectionInfoGet
|
||||
},
|
||||
PredicateFunc: pod.MatchPod,
|
||||
QualifiedResource: api.Resource("pods"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("pods"),
|
||||
|
||||
CreateStrategy: pod.Strategy,
|
||||
UpdateStrategy: pod.Strategy,
|
||||
|
||||
@@ -31,11 +31,11 @@ import (
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/storage"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
storeerr "k8s.io/kubernetes/pkg/api/errors/storage"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||
"k8s.io/kubernetes/pkg/securitycontext"
|
||||
storeerr "k8s.io/kubernetes/pkg/storage/errors"
|
||||
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
|
||||
)
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ go_library(
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/podtemplate:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
],
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/podtemplate"
|
||||
)
|
||||
|
||||
@@ -39,6 +40,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
||||
},
|
||||
PredicateFunc: podtemplate.MatchPodTemplate,
|
||||
QualifiedResource: api.Resource("podtemplates"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("podtemplates"),
|
||||
|
||||
CreateStrategy: podtemplate.Strategy,
|
||||
UpdateStrategy: podtemplate.Strategy,
|
||||
|
||||
@@ -42,6 +42,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/replicationcontroller:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/errors",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
|
||||
@@ -32,6 +32,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/replicationcontroller"
|
||||
)
|
||||
|
||||
@@ -68,6 +69,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: replicationcontroller.MatchController,
|
||||
QualifiedResource: api.Resource("replicationcontrollers"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("replicationcontrollers"),
|
||||
|
||||
CreateStrategy: replicationcontroller.Strategy,
|
||||
UpdateStrategy: replicationcontroller.Strategy,
|
||||
|
||||
@@ -38,6 +38,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/resourcequota:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/resourcequota"
|
||||
)
|
||||
|
||||
@@ -42,6 +43,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: resourcequota.MatchResourceQuota,
|
||||
QualifiedResource: api.Resource("resourcequotas"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("resourcequotas"),
|
||||
|
||||
CreateStrategy: resourcequota.Strategy,
|
||||
UpdateStrategy: resourcequota.Strategy,
|
||||
|
||||
@@ -33,6 +33,7 @@ go_library(
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/secret:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
],
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/secret"
|
||||
)
|
||||
|
||||
@@ -39,6 +40,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
||||
},
|
||||
PredicateFunc: secret.Matcher,
|
||||
QualifiedResource: api.Resource("secrets"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("secrets"),
|
||||
|
||||
CreateStrategy: secret.Strategy,
|
||||
UpdateStrategy: secret.Strategy,
|
||||
|
||||
@@ -29,10 +29,10 @@ go_library(
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/errors/storage:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/registry/core/rangeallocation:go_default_library",
|
||||
"//pkg/registry/core/service/allocator:go_default_library",
|
||||
"//pkg/storage/errors:go_default_library",
|
||||
"//vendor:golang.org/x/net/context",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/errors",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
|
||||
@@ -27,10 +27,10 @@ import (
|
||||
"k8s.io/apiserver/pkg/storage"
|
||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
storeerr "k8s.io/kubernetes/pkg/api/errors/storage"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
"k8s.io/kubernetes/pkg/registry/core/rangeallocation"
|
||||
"k8s.io/kubernetes/pkg/registry/core/service/allocator"
|
||||
storeerr "k8s.io/kubernetes/pkg/storage/errors"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
@@ -35,6 +35,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/service:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
|
||||
@@ -24,6 +24,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/service"
|
||||
)
|
||||
|
||||
@@ -42,6 +43,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: service.MatchServices,
|
||||
QualifiedResource: api.Resource("services"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("services"),
|
||||
|
||||
CreateStrategy: service.Strategy,
|
||||
UpdateStrategy: service.Strategy,
|
||||
|
||||
@@ -33,6 +33,7 @@ go_library(
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/core/serviceaccount:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
],
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/core/serviceaccount"
|
||||
)
|
||||
|
||||
@@ -39,6 +40,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST {
|
||||
},
|
||||
PredicateFunc: serviceaccount.Matcher,
|
||||
QualifiedResource: api.Resource("serviceaccounts"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("serviceaccounts"),
|
||||
|
||||
CreateStrategy: serviceaccount.Strategy,
|
||||
UpdateStrategy: serviceaccount.Strategy,
|
||||
|
||||
@@ -36,6 +36,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/extensions/daemonset:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/extensions/daemonset"
|
||||
)
|
||||
|
||||
@@ -44,6 +45,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: daemonset.MatchDaemonSet,
|
||||
QualifiedResource: extensions.Resource("daemonsets"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("daemonsets"),
|
||||
|
||||
CreateStrategy: daemonset.Strategy,
|
||||
UpdateStrategy: daemonset.Strategy,
|
||||
|
||||
@@ -15,11 +15,11 @@ go_test(
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/errors/storage:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/registrytest:go_default_library",
|
||||
"//pkg/storage/errors:go_default_library",
|
||||
"//pkg/storage/etcd/testing:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/equality",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/errors",
|
||||
@@ -39,13 +39,14 @@ go_library(
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/errors/storage:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/apis/extensions/validation:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/extensions/deployment:go_default_library",
|
||||
"//pkg/storage/errors:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/api/errors",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
|
||||
@@ -26,13 +26,14 @@ import (
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/storage"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
storeerr "k8s.io/kubernetes/pkg/api/errors/storage"
|
||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||
extvalidation "k8s.io/kubernetes/pkg/apis/extensions/validation"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/extensions/deployment"
|
||||
storeerr "k8s.io/kubernetes/pkg/storage/errors"
|
||||
)
|
||||
|
||||
// DeploymentStorage includes dummy storage for Deployments and for Scale subresource.
|
||||
@@ -70,6 +71,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Rollbac
|
||||
},
|
||||
PredicateFunc: deployment.MatchDeployment,
|
||||
QualifiedResource: extensions.Resource("deployments"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("deployments"),
|
||||
|
||||
CreateStrategy: deployment.Strategy,
|
||||
UpdateStrategy: deployment.Strategy,
|
||||
|
||||
@@ -30,11 +30,11 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
storeerr "k8s.io/kubernetes/pkg/api/errors/storage"
|
||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||
storeerr "k8s.io/kubernetes/pkg/storage/errors"
|
||||
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
|
||||
)
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ go_library(
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/genericapiserver/registry/rest:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/extensions/ingress:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/generic"
|
||||
genericregistry "k8s.io/kubernetes/pkg/genericapiserver/registry/generic/registry"
|
||||
"k8s.io/kubernetes/pkg/genericapiserver/registry/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||
"k8s.io/kubernetes/pkg/registry/extensions/ingress"
|
||||
)
|
||||
|
||||
@@ -44,6 +45,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) {
|
||||
},
|
||||
PredicateFunc: ingress.MatchIngress,
|
||||
QualifiedResource: extensions.Resource("ingresses"),
|
||||
WatchCacheSize: cachesize.GetWatchCacheSizeByResource("ingresses"),
|
||||
|
||||
CreateStrategy: ingress.Strategy,
|
||||
UpdateStrategy: ingress.Strategy,
|
||||
|
||||
@@ -36,6 +36,7 @@ go_library(
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic:go_default_library",
|
||||
"//pkg/genericapiserver/registry/generic/registry:go_default_library",
|
||||
"//pkg/registry/cachesize:go_default_library",
|
||||
"//pkg/registry/extensions/networkpolicy:go_default_library",
|
||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||
],
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user