mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Adding events to federation apiserver
This commit is contained in:
		@@ -18,13 +18,13 @@ package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app"
 | 
			
		||||
	genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options"
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// NewFederationAPIServer creates a new hyperkube Server object that includes the
 | 
			
		||||
// description and flags.
 | 
			
		||||
func NewFederationAPIServer() *Server {
 | 
			
		||||
	s := genericoptions.NewServerRunOptions().WithEtcdOptions()
 | 
			
		||||
	s := options.NewServerRunOptions()
 | 
			
		||||
 | 
			
		||||
	hks := Server{
 | 
			
		||||
		SimpleUsage: "federation-apiserver",
 | 
			
		||||
@@ -33,7 +33,6 @@ func NewFederationAPIServer() *Server {
 | 
			
		||||
			return app.Run(s)
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	s.AddUniversalFlags(hks.Flags())
 | 
			
		||||
	s.AddEtcdStorageFlags(hks.Flags())
 | 
			
		||||
	s.AddFlags(hks.Flags())
 | 
			
		||||
	return &hks
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/sets"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const importPrefix = "k8s.io/kubernetes/federation/api"
 | 
			
		||||
const importPrefix = "k8s.io/kubernetes/pkg/api"
 | 
			
		||||
 | 
			
		||||
var accessor = meta.NewAccessor()
 | 
			
		||||
 | 
			
		||||
@@ -99,7 +99,7 @@ func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper
 | 
			
		||||
		"DeleteOptions",
 | 
			
		||||
		"Status")
 | 
			
		||||
 | 
			
		||||
	mapper := api.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped)
 | 
			
		||||
	mapper := api.NewDefaultRESTMapperFromScheme(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped, core.Scheme)
 | 
			
		||||
	// setup aliases for groups of resources
 | 
			
		||||
	mapper.AddResourceAlias("all", userResources...)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,8 @@ func addKnownTypes(scheme *runtime.Scheme) error {
 | 
			
		||||
		&api.DeleteOptions{},
 | 
			
		||||
		&api.Secret{},
 | 
			
		||||
		&api.SecretList{},
 | 
			
		||||
		&api.Event{},
 | 
			
		||||
		&api.EventList{},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// Register Unversioned types under their own special group
 | 
			
		||||
 
 | 
			
		||||
@@ -81,5 +81,14 @@ func addConversionFuncs(scheme *runtime.Scheme) error {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if err := v1.AddFieldLabelConversionsForEvent(scheme); err != nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	if err := v1.AddFieldLabelConversionsForNamespace(scheme); err != nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	if err := v1.AddFieldLabelConversionsForSecret(scheme); err != nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,8 @@ func addKnownTypes(scheme *runtime.Scheme) error {
 | 
			
		||||
		&v1.DeleteOptions{},
 | 
			
		||||
		&v1.Secret{},
 | 
			
		||||
		&v1.SecretList{},
 | 
			
		||||
		&v1.Event{},
 | 
			
		||||
		&v1.EventList{},
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// Add common types
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app"
 | 
			
		||||
	genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options"
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/flag"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/logs"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/version/verflag"
 | 
			
		||||
@@ -36,9 +36,8 @@ import (
 | 
			
		||||
func main() {
 | 
			
		||||
	rand.Seed(time.Now().UTC().UnixNano())
 | 
			
		||||
 | 
			
		||||
	s := genericoptions.NewServerRunOptions().WithEtcdOptions()
 | 
			
		||||
	s.AddUniversalFlags(pflag.CommandLine)
 | 
			
		||||
	s.AddEtcdStorageFlags(pflag.CommandLine)
 | 
			
		||||
	s := options.NewServerRunOptions()
 | 
			
		||||
	s.AddFlags(pflag.CommandLine)
 | 
			
		||||
 | 
			
		||||
	flag.InitFlags()
 | 
			
		||||
	logs.InitLogs()
 | 
			
		||||
 
 | 
			
		||||
@@ -18,30 +18,32 @@ package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/genericapiserver"
 | 
			
		||||
	genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/federation/apis/core"
 | 
			
		||||
	_ "k8s.io/kubernetes/federation/apis/core/install"
 | 
			
		||||
	"k8s.io/kubernetes/federation/apis/core/v1"
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/genericapiserver"
 | 
			
		||||
	eventetcd "k8s.io/kubernetes/pkg/registry/event/etcd"
 | 
			
		||||
	namespaceetcd "k8s.io/kubernetes/pkg/registry/namespace/etcd"
 | 
			
		||||
	secretetcd "k8s.io/kubernetes/pkg/registry/secret/etcd"
 | 
			
		||||
	serviceetcd "k8s.io/kubernetes/pkg/registry/service/etcd"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func installCoreAPIs(s *genericoptions.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) {
 | 
			
		||||
func installCoreAPIs(s *options.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) {
 | 
			
		||||
	serviceStore, serviceStatusStore := serviceetcd.NewREST(createRESTOptionsOrDie(s, g, f, api.Resource("service")))
 | 
			
		||||
	namespaceStore, namespaceStatusStore, _ := namespaceetcd.NewREST(createRESTOptionsOrDie(s, g, f, api.Resource("namespaces")))
 | 
			
		||||
	secretStore := secretetcd.NewREST(createRESTOptionsOrDie(s, g, f, api.Resource("secrets")))
 | 
			
		||||
	eventStore := eventetcd.NewREST(createRESTOptionsOrDie(s, g, f, api.Resource("events")), uint64(s.EventTTL.Seconds()))
 | 
			
		||||
	coreResources := map[string]rest.Storage{
 | 
			
		||||
		"secrets":           secretStore,
 | 
			
		||||
		"services":          serviceStore,
 | 
			
		||||
		"services/status":   serviceStatusStore,
 | 
			
		||||
		"namespaces":        namespaceStore,
 | 
			
		||||
		"namespaces/status": namespaceStatusStore,
 | 
			
		||||
		"events":            eventStore,
 | 
			
		||||
	}
 | 
			
		||||
	coreGroupMeta := registered.GroupOrDie(core.GroupName)
 | 
			
		||||
	apiGroupInfo := genericapiserver.APIGroupInfo{
 | 
			
		||||
@@ -56,6 +58,6 @@ func installCoreAPIs(s *genericoptions.ServerRunOptions, g *genericapiserver.Gen
 | 
			
		||||
		NegotiatedSerializer:   core.Codecs,
 | 
			
		||||
	}
 | 
			
		||||
	if err := g.InstallAPIGroup(&apiGroupInfo); err != nil {
 | 
			
		||||
		glog.Fatalf("Error in registering group version: %v", err)
 | 
			
		||||
		glog.Fatalf("Error in registering group version: %+v.\n Error: %v\n", apiGroupInfo, err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,19 +18,18 @@ package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/genericapiserver"
 | 
			
		||||
	genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/apis/extensions/install"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/genericapiserver"
 | 
			
		||||
	ingressetcd "k8s.io/kubernetes/pkg/registry/ingress/etcd"
 | 
			
		||||
	replicasetetcd "k8s.io/kubernetes/pkg/registry/replicaset/etcd"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func installExtensionsAPIs(s *genericoptions.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) {
 | 
			
		||||
func installExtensionsAPIs(s *options.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) {
 | 
			
		||||
	replicaSetStorage := replicasetetcd.NewStorage(createRESTOptionsOrDie(s, g, f, extensions.Resource("replicasets")))
 | 
			
		||||
	ingressStorage, ingressStatusStorage := ingressetcd.NewREST(createRESTOptionsOrDie(s, g, f, extensions.Resource("ingresses")))
 | 
			
		||||
	extensionsResources := map[string]rest.Storage{
 | 
			
		||||
 
 | 
			
		||||
@@ -20,17 +20,17 @@ import (
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/federation/apis/federation"
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/genericapiserver"
 | 
			
		||||
	genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options"
 | 
			
		||||
 | 
			
		||||
	_ "k8s.io/kubernetes/federation/apis/federation/install"
 | 
			
		||||
	clusteretcd "k8s.io/kubernetes/federation/registry/cluster/etcd"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func installFederationAPIs(s *genericoptions.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) {
 | 
			
		||||
func installFederationAPIs(s *options.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) {
 | 
			
		||||
	clusterStorage, clusterStatusStorage := clusteretcd.NewREST(createRESTOptionsOrDie(s, g, f, federation.Resource("clusters")))
 | 
			
		||||
	federationResources := map[string]rest.Storage{
 | 
			
		||||
		"clusters":        clusterStorage,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								federation/cmd/federation-apiserver/app/options/options.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								federation/cmd/federation-apiserver/app/options/options.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2016 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
// Package options contains flags and options for initializing federation-apiserver.
 | 
			
		||||
package options
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Runtime options for the federation-apiserver.
 | 
			
		||||
type ServerRunOptions struct {
 | 
			
		||||
	*genericoptions.ServerRunOptions
 | 
			
		||||
	EventTTL time.Duration
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewServerRunOptions creates a new ServerRunOptions object with default values.
 | 
			
		||||
func NewServerRunOptions() *ServerRunOptions {
 | 
			
		||||
	s := ServerRunOptions{
 | 
			
		||||
		ServerRunOptions: genericoptions.NewServerRunOptions().WithEtcdOptions(),
 | 
			
		||||
		EventTTL:         1 * time.Hour,
 | 
			
		||||
	}
 | 
			
		||||
	return &s
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddFlags adds flags for ServerRunOptions fields to be specified via FlagSet.
 | 
			
		||||
func (s *ServerRunOptions) AddFlags(fs *pflag.FlagSet) {
 | 
			
		||||
	// Add the generic flags.
 | 
			
		||||
	s.ServerRunOptions.AddUniversalFlags(fs)
 | 
			
		||||
	//Add etcd specific flags.
 | 
			
		||||
	s.ServerRunOptions.AddEtcdStorageFlags(fs)
 | 
			
		||||
 | 
			
		||||
	fs.DurationVar(&s.EventTTL, "event-ttl", s.EventTTL,
 | 
			
		||||
		"Amount of time to retain events. Default is 1h.")
 | 
			
		||||
}
 | 
			
		||||
@@ -27,6 +27,7 @@ import (
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/admission"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/unversioned"
 | 
			
		||||
@@ -34,7 +35,6 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apiserver/authenticator"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/controller/framework/informers"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/genericapiserver"
 | 
			
		||||
	genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options"
 | 
			
		||||
	genericvalidation "k8s.io/kubernetes/pkg/genericapiserver/validation"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/registry/cachesize"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/registry/generic"
 | 
			
		||||
@@ -43,9 +43,8 @@ import (
 | 
			
		||||
 | 
			
		||||
// NewAPIServerCommand creates a *cobra.Command object with default parameters
 | 
			
		||||
func NewAPIServerCommand() *cobra.Command {
 | 
			
		||||
	s := genericoptions.NewServerRunOptions().WithEtcdOptions()
 | 
			
		||||
	s.AddUniversalFlags(pflag.CommandLine)
 | 
			
		||||
	s.AddEtcdStorageFlags(pflag.CommandLine)
 | 
			
		||||
	s := options.NewServerRunOptions()
 | 
			
		||||
	s.AddFlags(pflag.CommandLine)
 | 
			
		||||
	cmd := &cobra.Command{
 | 
			
		||||
		Use: "federation-apiserver",
 | 
			
		||||
		Long: `The Kubernetes federation API server validates and configures data
 | 
			
		||||
@@ -55,14 +54,13 @@ cluster's shared state through which all other components interact.`,
 | 
			
		||||
		Run: func(cmd *cobra.Command, args []string) {
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return cmd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Run runs the specified APIServer.  This should never exit.
 | 
			
		||||
func Run(s *genericoptions.ServerRunOptions) error {
 | 
			
		||||
	genericvalidation.VerifyEtcdServersList(s)
 | 
			
		||||
	genericapiserver.DefaultAndValidateRunOptions(s)
 | 
			
		||||
func Run(s *options.ServerRunOptions) error {
 | 
			
		||||
	genericvalidation.VerifyEtcdServersList(s.ServerRunOptions)
 | 
			
		||||
	genericapiserver.DefaultAndValidateRunOptions(s.ServerRunOptions)
 | 
			
		||||
 | 
			
		||||
	// TODO: register cluster federation resources here.
 | 
			
		||||
	resourceConfig := genericapiserver.NewResourceConfig()
 | 
			
		||||
@@ -132,7 +130,7 @@ func Run(s *genericoptions.ServerRunOptions) error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		glog.Fatalf("Failed to initialize plugins: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	genericConfig := genericapiserver.NewConfig(s)
 | 
			
		||||
	genericConfig := genericapiserver.NewConfig(s.ServerRunOptions)
 | 
			
		||||
	// TODO: Move the following to generic api server as well.
 | 
			
		||||
	genericConfig.StorageFactory = storageFactory
 | 
			
		||||
	genericConfig.Authenticator = authenticator
 | 
			
		||||
@@ -159,11 +157,11 @@ func Run(s *genericoptions.ServerRunOptions) error {
 | 
			
		||||
	installExtensionsAPIs(s, m, storageFactory)
 | 
			
		||||
 | 
			
		||||
	sharedInformers.Start(wait.NeverStop)
 | 
			
		||||
	m.Run(s)
 | 
			
		||||
	m.Run(s.ServerRunOptions)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func createRESTOptionsOrDie(s *genericoptions.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory, resource unversioned.GroupResource) generic.RESTOptions {
 | 
			
		||||
func createRESTOptionsOrDie(s *options.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory, resource unversioned.GroupResource) generic.RESTOptions {
 | 
			
		||||
	storage, err := f.New(resource)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		glog.Fatalf("Unable to find storage destination for %v, due to %v", resource, err.Error())
 | 
			
		||||
 
 | 
			
		||||
@@ -29,14 +29,14 @@ import (
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
 | 
			
		||||
	fed_v1b1 "k8s.io/kubernetes/federation/apis/federation/v1beta1"
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/unversioned"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/v1"
 | 
			
		||||
	ext_v1b1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/genericapiserver/options"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestLongRunningRequestRegexp(t *testing.T) {
 | 
			
		||||
	regexp := regexp.MustCompile(options.NewServerRunOptions().WithEtcdOptions().LongRunningRequestRE)
 | 
			
		||||
	regexp := regexp.MustCompile(options.NewServerRunOptions().LongRunningRequestRE)
 | 
			
		||||
	dontMatch := []string{
 | 
			
		||||
		"/api/v1/watch-namespace/",
 | 
			
		||||
		"/api/v1/namespace-proxy/",
 | 
			
		||||
@@ -84,7 +84,7 @@ var groupVersions = []unversioned.GroupVersion{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestRun(t *testing.T) {
 | 
			
		||||
	s := options.NewServerRunOptions().WithEtcdOptions()
 | 
			
		||||
	s := options.NewServerRunOptions()
 | 
			
		||||
	s.InsecurePort = insecurePort
 | 
			
		||||
	_, ipNet, _ := net.ParseCIDR("10.10.10.0/24")
 | 
			
		||||
	s.ServiceClusterIPRange = *ipNet
 | 
			
		||||
@@ -258,6 +258,8 @@ func testFederationResourceList(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
	assert.Equal(t, "v1", apiResourceList.APIVersion)
 | 
			
		||||
	assert.Equal(t, fed_v1b1.SchemeGroupVersion.String(), apiResourceList.GroupVersion)
 | 
			
		||||
	// Assert that there are exactly 2 resources.
 | 
			
		||||
	assert.Equal(t, 2, len(apiResourceList.APIResources))
 | 
			
		||||
 | 
			
		||||
	found := findResource(apiResourceList.APIResources, "clusters")
 | 
			
		||||
	assert.NotNil(t, found)
 | 
			
		||||
@@ -280,13 +282,34 @@ func testCoreResourceList(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
	assert.Equal(t, "", apiResourceList.APIVersion)
 | 
			
		||||
	assert.Equal(t, v1.SchemeGroupVersion.String(), apiResourceList.GroupVersion)
 | 
			
		||||
	// Assert that there are exactly 6 resources.
 | 
			
		||||
	assert.Equal(t, 6, len(apiResourceList.APIResources))
 | 
			
		||||
 | 
			
		||||
	// Verify services.
 | 
			
		||||
	found := findResource(apiResourceList.APIResources, "services")
 | 
			
		||||
	assert.NotNil(t, found)
 | 
			
		||||
	assert.True(t, found.Namespaced)
 | 
			
		||||
	found = findResource(apiResourceList.APIResources, "services/status")
 | 
			
		||||
	assert.NotNil(t, found)
 | 
			
		||||
	assert.True(t, found.Namespaced)
 | 
			
		||||
 | 
			
		||||
	// Verify namespaces.
 | 
			
		||||
	found = findResource(apiResourceList.APIResources, "namespaces")
 | 
			
		||||
	assert.NotNil(t, found)
 | 
			
		||||
	assert.True(t, found.Namespaced)
 | 
			
		||||
	found = findResource(apiResourceList.APIResources, "namespaces/status")
 | 
			
		||||
	assert.NotNil(t, found)
 | 
			
		||||
	assert.True(t, found.Namespaced)
 | 
			
		||||
 | 
			
		||||
	// Verify events.
 | 
			
		||||
	found = findResource(apiResourceList.APIResources, "events")
 | 
			
		||||
	assert.NotNil(t, found)
 | 
			
		||||
	assert.True(t, found.Namespaced)
 | 
			
		||||
 | 
			
		||||
	// Verify secrets.
 | 
			
		||||
	found = findResource(apiResourceList.APIResources, "secrets")
 | 
			
		||||
	assert.NotNil(t, found)
 | 
			
		||||
	assert.True(t, found.Namespaced)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func testExtensionsResourceList(t *testing.T) {
 | 
			
		||||
@@ -303,6 +326,8 @@ func testExtensionsResourceList(t *testing.T) {
 | 
			
		||||
	// empty APIVersion for extensions group
 | 
			
		||||
	assert.Equal(t, "", apiResourceList.APIVersion)
 | 
			
		||||
	assert.Equal(t, ext_v1b1.SchemeGroupVersion.String(), apiResourceList.GroupVersion)
 | 
			
		||||
	// Assert that there are exactly 5 resources.
 | 
			
		||||
	assert.Equal(t, 5, len(apiResourceList.APIResources))
 | 
			
		||||
 | 
			
		||||
	// Verify replicasets.
 | 
			
		||||
	found := findResource(apiResourceList.APIResources, "replicasets")
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,7 @@ import (
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/meta"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/unversioned"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/util/sets"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -34,14 +35,21 @@ func RegisterRESTMapper(m meta.RESTMapper) {
 | 
			
		||||
	RESTMapper = append(RESTMapper.(meta.MultiRESTMapper), m)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Instantiates a DefaultRESTMapper based on types registered in api.Scheme
 | 
			
		||||
func NewDefaultRESTMapper(defaultGroupVersions []unversioned.GroupVersion, interfacesFunc meta.VersionInterfacesFunc,
 | 
			
		||||
	importPathPrefix string, ignoredKinds, rootScoped sets.String) *meta.DefaultRESTMapper {
 | 
			
		||||
	return NewDefaultRESTMapperFromScheme(defaultGroupVersions, interfacesFunc, importPathPrefix, ignoredKinds, rootScoped, Scheme)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Instantiates a DefaultRESTMapper based on types registered in the given scheme.
 | 
			
		||||
func NewDefaultRESTMapperFromScheme(defaultGroupVersions []unversioned.GroupVersion, interfacesFunc meta.VersionInterfacesFunc,
 | 
			
		||||
	importPathPrefix string, ignoredKinds, rootScoped sets.String, scheme *runtime.Scheme) *meta.DefaultRESTMapper {
 | 
			
		||||
 | 
			
		||||
	mapper := meta.NewDefaultRESTMapper(defaultGroupVersions, interfacesFunc)
 | 
			
		||||
	// enumerate all supported versions, get the kinds, and register with the mapper how to address
 | 
			
		||||
	// our resources.
 | 
			
		||||
	for _, gv := range defaultGroupVersions {
 | 
			
		||||
		for kind, oType := range Scheme.KnownTypes(gv) {
 | 
			
		||||
		for kind, oType := range scheme.KnownTypes(gv) {
 | 
			
		||||
			gvk := gv.WithKind(kind)
 | 
			
		||||
			// TODO: Remove import path check.
 | 
			
		||||
			// We check the import path because we currently stuff both "api" and "extensions" objects
 | 
			
		||||
 
 | 
			
		||||
@@ -172,7 +172,7 @@ func addConversionFuncs(scheme *runtime.Scheme) error {
 | 
			
		||||
		"ServiceAccount",
 | 
			
		||||
		"ConfigMap",
 | 
			
		||||
	} {
 | 
			
		||||
		err = api.Scheme.AddFieldLabelConversionFunc("v1", kind,
 | 
			
		||||
		err = scheme.AddFieldLabelConversionFunc("v1", kind,
 | 
			
		||||
			func(label, value string) (string, string, error) {
 | 
			
		||||
				switch label {
 | 
			
		||||
				case "metadata.namespace",
 | 
			
		||||
@@ -189,7 +189,7 @@ func addConversionFuncs(scheme *runtime.Scheme) error {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Add field conversion funcs.
 | 
			
		||||
	err = api.Scheme.AddFieldLabelConversionFunc("v1", "Pod",
 | 
			
		||||
	err = scheme.AddFieldLabelConversionFunc("v1", "Pod",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "metadata.name",
 | 
			
		||||
@@ -212,7 +212,7 @@ func addConversionFuncs(scheme *runtime.Scheme) error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = api.Scheme.AddFieldLabelConversionFunc("v1", "Node",
 | 
			
		||||
	err = scheme.AddFieldLabelConversionFunc("v1", "Node",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "metadata.name":
 | 
			
		||||
@@ -227,7 +227,7 @@ func addConversionFuncs(scheme *runtime.Scheme) error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = api.Scheme.AddFieldLabelConversionFunc("v1", "ReplicationController",
 | 
			
		||||
	err = scheme.AddFieldLabelConversionFunc("v1", "ReplicationController",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "metadata.name",
 | 
			
		||||
@@ -241,45 +241,7 @@ func addConversionFuncs(scheme *runtime.Scheme) error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = api.Scheme.AddFieldLabelConversionFunc("v1", "Event",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "involvedObject.kind",
 | 
			
		||||
				"involvedObject.namespace",
 | 
			
		||||
				"involvedObject.name",
 | 
			
		||||
				"involvedObject.uid",
 | 
			
		||||
				"involvedObject.apiVersion",
 | 
			
		||||
				"involvedObject.resourceVersion",
 | 
			
		||||
				"involvedObject.fieldPath",
 | 
			
		||||
				"reason",
 | 
			
		||||
				"source",
 | 
			
		||||
				"type",
 | 
			
		||||
				"metadata.namespace",
 | 
			
		||||
				"metadata.name":
 | 
			
		||||
				return label, value, nil
 | 
			
		||||
			default:
 | 
			
		||||
				return "", "", fmt.Errorf("field label not supported: %s", label)
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = api.Scheme.AddFieldLabelConversionFunc("v1", "Namespace",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "status.phase",
 | 
			
		||||
				"metadata.name":
 | 
			
		||||
				return label, value, nil
 | 
			
		||||
			default:
 | 
			
		||||
				return "", "", fmt.Errorf("field label not supported: %s", label)
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = api.Scheme.AddFieldLabelConversionFunc("v1", "PersistentVolume",
 | 
			
		||||
	err = scheme.AddFieldLabelConversionFunc("v1", "PersistentVolume",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "metadata.name":
 | 
			
		||||
@@ -292,19 +254,13 @@ func addConversionFuncs(scheme *runtime.Scheme) error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = api.Scheme.AddFieldLabelConversionFunc("v1", "Secret",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "type",
 | 
			
		||||
				"metadata.namespace",
 | 
			
		||||
				"metadata.name":
 | 
			
		||||
				return label, value, nil
 | 
			
		||||
			default:
 | 
			
		||||
				return "", "", fmt.Errorf("field label not supported: %s", label)
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
	if err := AddFieldLabelConversionsForEvent(scheme); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if err := AddFieldLabelConversionsForNamespace(scheme); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if err := AddFieldLabelConversionsForSecret(scheme); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
@@ -769,3 +725,53 @@ func Convert_v1_ResourceList_To_api_ResourceList(in *ResourceList, out *api.Reso
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AddFieldLabelConversionsForEvent(scheme *runtime.Scheme) error {
 | 
			
		||||
	return scheme.AddFieldLabelConversionFunc("v1", "Event",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "involvedObject.kind",
 | 
			
		||||
				"involvedObject.namespace",
 | 
			
		||||
				"involvedObject.name",
 | 
			
		||||
				"involvedObject.uid",
 | 
			
		||||
				"involvedObject.apiVersion",
 | 
			
		||||
				"involvedObject.resourceVersion",
 | 
			
		||||
				"involvedObject.fieldPath",
 | 
			
		||||
				"reason",
 | 
			
		||||
				"source",
 | 
			
		||||
				"type",
 | 
			
		||||
				"metadata.namespace",
 | 
			
		||||
				"metadata.name":
 | 
			
		||||
				return label, value, nil
 | 
			
		||||
			default:
 | 
			
		||||
				return "", "", fmt.Errorf("field label not supported: %s", label)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AddFieldLabelConversionsForNamespace(scheme *runtime.Scheme) error {
 | 
			
		||||
	return scheme.AddFieldLabelConversionFunc("v1", "Namespace",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "status.phase",
 | 
			
		||||
				"metadata.name":
 | 
			
		||||
				return label, value, nil
 | 
			
		||||
			default:
 | 
			
		||||
				return "", "", fmt.Errorf("field label not supported: %s", label)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func AddFieldLabelConversionsForSecret(scheme *runtime.Scheme) error {
 | 
			
		||||
	return scheme.AddFieldLabelConversionFunc("v1", "Secret",
 | 
			
		||||
		func(label, value string) (string, string, error) {
 | 
			
		||||
			switch label {
 | 
			
		||||
			case "type",
 | 
			
		||||
				"metadata.namespace",
 | 
			
		||||
				"metadata.name":
 | 
			
		||||
				return label, value, nil
 | 
			
		||||
			default:
 | 
			
		||||
				return "", "", fmt.Errorf("field label not supported: %s", label)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user