From f2edba3becf7e2afeaad929488c6eef3ae02e6d9 Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Thu, 10 Dec 2015 17:51:32 -0800 Subject: [PATCH] remove ServerAPIVersions from client hard-code the groupVersion in SetKubernetesDefaults --- cmd/integration/integration.go | 8 ++++--- pkg/client/unversioned/client.go | 15 ------------ pkg/client/unversioned/client_test.go | 23 ------------------- pkg/client/unversioned/extensions.go | 16 ------------- pkg/client/unversioned/helper.go | 15 ++++++++---- .../unversioned/helper_blackbox_test.go | 2 +- pkg/client/unversioned/helper_test.go | 18 ++++++++------- 7 files changed, 26 insertions(+), 71 deletions(-) diff --git a/cmd/integration/integration.go b/cmd/integration/integration.go index b7a6f7ef16a..b1797b8fabc 100644 --- a/cmd/integration/integration.go +++ b/cmd/integration/integration.go @@ -463,19 +463,21 @@ func runReplicationControllerTest(c *client.Client) { } func runAPIVersionsTest(c *client.Client) { - v, err := c.ServerAPIVersions() + g, err := c.ServerGroups() clientVersion := c.APIVersion().String() if err != nil { glog.Fatalf("Failed to get api versions: %v", err) } + versions := client.ExtractGroupVersions(g) + // Verify that the server supports the API version used by the client. - for _, version := range v.Versions { + for _, version := range versions { if version == clientVersion { glog.Infof("Version test passed") return } } - glog.Fatalf("Server does not support APIVersion used by client. Server supported APIVersions: '%v', client APIVersion: '%v'", v.Versions, clientVersion) + glog.Fatalf("Server does not support APIVersion used by client. Server supported APIVersions: '%v', client APIVersion: '%v'", versions, clientVersion) } func runSelfLinkTestOnNamespace(c *client.Client, namespace string) { diff --git a/pkg/client/unversioned/client.go b/pkg/client/unversioned/client.go index e4b2d4caad4..d272569e833 100644 --- a/pkg/client/unversioned/client.go +++ b/pkg/client/unversioned/client.go @@ -116,7 +116,6 @@ func (c *Client) ComponentStatuses() ComponentStatusInterface { // VersionInterface has a method to retrieve the server version. type VersionInterface interface { ServerVersion() (*version.Info, error) - ServerAPIVersions() (*unversioned.APIVersions, error) } // Client is the implementation of a Kubernetes client. @@ -141,20 +140,6 @@ func (c *Client) ServerVersion() (*version.Info, error) { return &info, nil } -// ServerAPIVersions retrieves and parses the list of API versions the server supports. -func (c *Client) ServerAPIVersions() (*unversioned.APIVersions, error) { - body, err := c.Get().AbsPath("/api").Do().Raw() - if err != nil { - return nil, err - } - var v unversioned.APIVersions - err = json.Unmarshal(body, &v) - if err != nil { - return nil, fmt.Errorf("got '%s': %v", string(body), err) - } - return &v, nil -} - // SwaggerSchemaInterface has a method to retrieve the swagger schema. Used in // client.Interface type SwaggerSchemaInterface interface { diff --git a/pkg/client/unversioned/client_test.go b/pkg/client/unversioned/client_test.go index 814a8bdc674..75d64ab1fe2 100644 --- a/pkg/client/unversioned/client_test.go +++ b/pkg/client/unversioned/client_test.go @@ -235,29 +235,6 @@ func TestGetServerResources(t *testing.T) { } } -func TestGetServerAPIVersions(t *testing.T) { - versions := []string{"v1", "v2", "v3"} - expect := unversioned.APIVersions{Versions: versions} - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - output, err := json.Marshal(expect) - if err != nil { - t.Errorf("unexpected encoding error: %v", err) - return - } - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - w.Write(output) - })) - client := NewOrDie(&Config{Host: server.URL}) - got, err := client.ServerAPIVersions() - if err != nil { - t.Fatalf("unexpected encoding error: %v", err) - } - if e, a := expect, *got; !reflect.DeepEqual(e, a) { - t.Errorf("expected %v, got %v", e, a) - } -} - func swaggerSchemaFakeServer() (*httptest.Server, error) { request := 1 var sErr error diff --git a/pkg/client/unversioned/extensions.go b/pkg/client/unversioned/extensions.go index 093ebb5fe5e..c0ff2fbe9c0 100644 --- a/pkg/client/unversioned/extensions.go +++ b/pkg/client/unversioned/extensions.go @@ -21,7 +21,6 @@ import ( "fmt" "k8s.io/kubernetes/pkg/api/latest" - "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/version" ) @@ -63,21 +62,6 @@ func (c *ExtensionsClient) ServerVersion() (*version.Info, error) { return &info, nil } -// ServerAPIVersions retrieves and parses the list of experimental API versions the -// server supports. -func (c *ExtensionsClient) ServerAPIVersions() (*unversioned.APIVersions, error) { - body, err := c.Get().AbsPath("/apis/extensions").Do().Raw() - if err != nil { - return nil, err - } - var v unversioned.APIVersions - err = json.Unmarshal(body, &v) - if err != nil { - return nil, fmt.Errorf("got '%s': %v", string(body), err) - } - return &v, nil -} - func (c *ExtensionsClient) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerInterface { return newHorizontalPodAutoscalers(c, namespace) } diff --git a/pkg/client/unversioned/helper.go b/pkg/client/unversioned/helper.go index 086c05a290d..5b5ef5dac3c 100644 --- a/pkg/client/unversioned/helper.go +++ b/pkg/client/unversioned/helper.go @@ -248,14 +248,15 @@ func NegotiateVersion(client *Client, c *Config, requestedGV *unversioned.GroupV for _, gv := range clientRegisteredGVs { clientVersions.Insert(gv.String()) } - apiVersions, err := client.ServerAPIVersions() + groups, err := client.ServerGroups() if err != nil { // This is almost always a connection error, and higher level code should treat this as a generic error, // not a negotiation specific error. return nil, err } + versions := ExtractGroupVersions(groups) serverVersions := sets.String{} - for _, v := range apiVersions.Versions { + for _, v := range versions { serverVersions.Insert(v) } @@ -362,10 +363,14 @@ func SetKubernetesDefaults(config *Config) error { if len(config.UserAgent) == 0 { config.UserAgent = DefaultKubernetesUserAgent() } - if config.GroupVersion == nil { - config.GroupVersion = defaultVersionFor(config) + g, err := latest.Group(api.GroupName) + if err != nil { + return err } - versionInterfaces, err := latest.GroupOrDie(api.GroupName).InterfacesFor(*config.GroupVersion) + // TODO: Unconditionally set the config.Version, until we fix the config. + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + versionInterfaces, err := g.InterfacesFor(*config.GroupVersion) if err != nil { return fmt.Errorf("API version '%v' is not recognized (valid values: %v)", *config.GroupVersion, latest.GroupOrDie(api.GroupName).GroupVersions) } diff --git a/pkg/client/unversioned/helper_blackbox_test.go b/pkg/client/unversioned/helper_blackbox_test.go index 1175cf0dc05..a913886488f 100644 --- a/pkg/client/unversioned/helper_blackbox_test.go +++ b/pkg/client/unversioned/helper_blackbox_test.go @@ -108,7 +108,7 @@ func TestNegotiateVersion(t *testing.T) { }), } c := unversioned.NewOrDie(test.config) - c.Client = fakeClient.Client + c.DiscoveryClient.Client = fakeClient.Client response, err := unversioned.NegotiateVersion(c, test.config, test.version, test.clientVersions) if err == nil && test.expectErr != nil { t.Errorf("expected error, got nil for [%s].", test.name) diff --git a/pkg/client/unversioned/helper_test.go b/pkg/client/unversioned/helper_test.go index db479f47d3c..f7b5f8be254 100644 --- a/pkg/client/unversioned/helper_test.go +++ b/pkg/client/unversioned/helper_test.go @@ -99,13 +99,14 @@ func TestSetKubernetesDefaults(t *testing.T) { }, false, }, - { - Config{ - GroupVersion: &unversioned.GroupVersion{Group: "not.a.group", Version: "not_an_api"}, - }, - Config{}, - true, - }, + // Add this test back when we fixed config and SetKubernetesDefaults + // { + // Config{ + // GroupVersion: &unversioned.GroupVersion{Group: "not.a.group", Version: "not_an_api"}, + // }, + // Config{}, + // true, + // }, } for _, testCase := range testCases { val := &testCase.Config @@ -200,7 +201,8 @@ func TestSetsCodec(t *testing.T) { Codec runtime.Codec }{ testapi.Default.GroupVersion().Version: {false, "/api/" + testapi.Default.GroupVersion().Version + "/", testapi.Default.Codec()}, - "invalidVersion": {true, "", nil}, + // Add this test back when we fixed config and SetKubernetesDefaults + // "invalidVersion": {true, "", nil}, } for version, expected := range testCases { client, err := New(&Config{Host: "127.0.0.1", GroupVersion: &unversioned.GroupVersion{Version: version}})