From bf3e1a5f97c03b52e2136ad85206628fbef536f6 Mon Sep 17 00:00:00 2001 From: jianhuiz Date: Wed, 27 Apr 2016 11:52:08 -0700 Subject: [PATCH] register extensions/replicasets to federated-apiserver --- .../federation-apiserver/app/extensions.go | 53 +++++++++++++++++++ .../cmd/federation-apiserver/app/server.go | 1 + .../federation-apiserver/app/server_test.go | 43 ++++++++++++--- 3 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 federation/cmd/federation-apiserver/app/extensions.go diff --git a/federation/cmd/federation-apiserver/app/extensions.go b/federation/cmd/federation-apiserver/app/extensions.go new file mode 100644 index 00000000000..4c5cd0be421 --- /dev/null +++ b/federation/cmd/federation-apiserver/app/extensions.go @@ -0,0 +1,53 @@ +/* +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 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/pkg/api" + "k8s.io/kubernetes/pkg/api/rest" + "k8s.io/kubernetes/pkg/apis/extensions" + _ "k8s.io/kubernetes/pkg/apis/extensions/install" + replicasetetcd "k8s.io/kubernetes/pkg/registry/replicaset/etcd" +) + +func installExtensionsAPIs(s *genericoptions.ServerRunOptions, g *genericapiserver.GenericAPIServer, f genericapiserver.StorageFactory) { + replicaSetStorage := replicasetetcd.NewStorage(createRESTOptionsOrDie(s, g, f, extensions.Resource("replicasets"))) + extensionsResources := map[string]rest.Storage{ + "replicasets": replicaSetStorage.ReplicaSet, + "replicasets/status": replicaSetStorage.Status, + "replicasets/scale": replicaSetStorage.Scale, + } + extensionsGroupMeta := registered.GroupOrDie(extensions.GroupName) + apiGroupInfo := genericapiserver.APIGroupInfo{ + GroupMeta: *extensionsGroupMeta, + VersionedResourcesStorageMap: map[string]map[string]rest.Storage{ + "v1beta1": extensionsResources, + }, + OptionsExternalVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion, + Scheme: api.Scheme, + ParameterCodec: api.ParameterCodec, + NegotiatedSerializer: api.Codecs, + } + if err := g.InstallAPIGroup(&apiGroupInfo); err != nil { + glog.Fatalf("Error in registering group versions: %v", err) + } +} diff --git a/federation/cmd/federation-apiserver/app/server.go b/federation/cmd/federation-apiserver/app/server.go index 46d294434de..df5a5f8dcc0 100644 --- a/federation/cmd/federation-apiserver/app/server.go +++ b/federation/cmd/federation-apiserver/app/server.go @@ -144,6 +144,7 @@ func Run(s *genericoptions.ServerRunOptions) error { installFederationAPIs(s, m, storageFactory) installCoreAPIs(s, m, storageFactory) + installExtensionsAPIs(s, m, storageFactory) m.Run(s) return nil diff --git a/federation/cmd/federation-apiserver/app/server_test.go b/federation/cmd/federation-apiserver/app/server_test.go index db693d92a47..da3dfc0d486 100644 --- a/federation/cmd/federation-apiserver/app/server_test.go +++ b/federation/cmd/federation-apiserver/app/server_test.go @@ -17,20 +17,21 @@ limitations under the License. package app import ( - "regexp" - "testing" - "encoding/json" "fmt" "io/ioutil" "net" "net/http" + "regexp" + "testing" "time" "github.com/stretchr/testify/assert" - fed_v1a1 "k8s.io/kubernetes/federation/apis/federation/v1beta1" + + fed_v1b1 "k8s.io/kubernetes/federation/apis/federation/v1beta1" "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" ) @@ -78,7 +79,8 @@ func TestLongRunningRequestRegexp(t *testing.T) { var insecurePort = 8082 var serverIP = fmt.Sprintf("http://localhost:%v", insecurePort) var groupVersions = []unversioned.GroupVersion{ - fed_v1a1.SchemeGroupVersion, + fed_v1b1.SchemeGroupVersion, + ext_v1b1.SchemeGroupVersion, } func TestRun(t *testing.T) { @@ -240,10 +242,11 @@ func findResource(resources []unversioned.APIResource, resourceName string) *unv func testAPIResourceList(t *testing.T) { testFederationResourceList(t) testCoreResourceList(t) + testExtensionsResourceList(t) } func testFederationResourceList(t *testing.T) { - serverURL := serverIP + "/apis/" + fed_v1a1.SchemeGroupVersion.String() + serverURL := serverIP + "/apis/" + fed_v1b1.SchemeGroupVersion.String() contents, err := readResponse(serverURL) if err != nil { t.Fatalf("%v", err) @@ -254,7 +257,7 @@ func testFederationResourceList(t *testing.T) { t.Fatalf("Error in unmarshalling response from server %s: %v", serverURL, err) } assert.Equal(t, "v1", apiResourceList.APIVersion) - assert.Equal(t, fed_v1a1.SchemeGroupVersion.String(), apiResourceList.GroupVersion) + assert.Equal(t, fed_v1b1.SchemeGroupVersion.String(), apiResourceList.GroupVersion) found := findResource(apiResourceList.APIResources, "clusters") assert.NotNil(t, found) @@ -285,3 +288,29 @@ func testCoreResourceList(t *testing.T) { assert.NotNil(t, found) assert.True(t, found.Namespaced) } + +func testExtensionsResourceList(t *testing.T) { + serverURL := serverIP + "/apis/" + ext_v1b1.SchemeGroupVersion.String() + contents, err := readResponse(serverURL) + if err != nil { + t.Fatalf("%v", err) + } + var apiResourceList unversioned.APIResourceList + err = json.Unmarshal(contents, &apiResourceList) + if err != nil { + t.Fatalf("Error in unmarshalling response from server %s: %v", serverURL, err) + } + // empty APIVersion for extensions group + assert.Equal(t, "", apiResourceList.APIVersion) + assert.Equal(t, ext_v1b1.SchemeGroupVersion.String(), apiResourceList.GroupVersion) + + found := findResource(apiResourceList.APIResources, "replicasets") + assert.NotNil(t, found) + assert.True(t, found.Namespaced) + found = findResource(apiResourceList.APIResources, "replicasets/status") + assert.NotNil(t, found) + assert.True(t, found.Namespaced) + found = findResource(apiResourceList.APIResources, "replicasets/scale") + assert.NotNil(t, found) + assert.True(t, found.Namespaced) +}