diff --git a/hack/.golint_failures b/hack/.golint_failures index 90b0b224102..00b0b175e44 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -81,7 +81,6 @@ pkg/client/chaosclient pkg/client/informers/informers_generated/internalversion/internalinterfaces pkg/client/leaderelectionconfig pkg/client/tests -pkg/client/unversioned/testclient/simple pkg/cloudprovider pkg/cloudprovider/providers/aws pkg/cloudprovider/providers/fake diff --git a/pkg/BUILD b/pkg/BUILD index c321899a547..9b5868573b2 100644 --- a/pkg/BUILD +++ b/pkg/BUILD @@ -76,7 +76,6 @@ filegroup( "//pkg/client/metrics/prometheus:all-srcs", "//pkg/client/testdata:all-srcs", "//pkg/client/tests:all-srcs", - "//pkg/client/unversioned:all-srcs", "//pkg/cloudprovider:all-srcs", "//pkg/controller:all-srcs", "//pkg/credentialprovider:all-srcs", diff --git a/pkg/client/unversioned/BUILD b/pkg/client/unversioned/BUILD deleted file mode 100644 index 816236d8892..00000000000 --- a/pkg/client/unversioned/BUILD +++ /dev/null @@ -1,66 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = [ - "conditions.go", - "helper.go", - ], - importpath = "k8s.io/kubernetes/pkg/client/unversioned", - deps = [ - "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/pod:go_default_library", - "//pkg/apis/apps:go_default_library", - "//pkg/apis/batch:go_default_library", - "//pkg/apis/core:go_default_library", - "//pkg/apis/extensions:go_default_library", - "//pkg/client/clientset_generated/internalclientset/typed/apps/internalversion:go_default_library", - "//pkg/client/clientset_generated/internalclientset/typed/batch/internalversion:go_default_library", - "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", - "//pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", - "//vendor/k8s.io/client-go/plugin/pkg/client/auth:go_default_library", - "//vendor/k8s.io/client-go/rest:go_default_library", - ], -) - -go_test( - name = "go_default_test", - srcs = ["helper_test.go"], - embed = [":go_default_library"], - deps = [ - "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", - "//pkg/apis/core:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//vendor/k8s.io/client-go/rest:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//pkg/client/unversioned/testclient/simple:all-srcs", - ], - tags = ["automanaged"], -) diff --git a/pkg/client/unversioned/OWNERS b/pkg/client/unversioned/OWNERS deleted file mode 100755 index 72344a162c3..00000000000 --- a/pkg/client/unversioned/OWNERS +++ /dev/null @@ -1,38 +0,0 @@ -reviewers: -- thockin -- lavalamp -- smarterclayton -- wojtek-t -- deads2k -- derekwaynecarr -- caesarxuchao -- vishh -- mikedanese -- liggitt -- nikhiljindal -- ixdy -- gmarek -- erictune -- davidopp -- pmorie -- sttts -- saad-ali -- zmerlynn -- janetkuo -- ncdc -- tallclair -- mwielgus -- timothysc -- feiskyer -- jlowdermilk -- soltysh -- piosz -- dims -- errordeveloper -- madhusudancs -- hongchaodeng -- krousey -- jayunit100 -- jszczepkowski -- jdef -- mml diff --git a/pkg/client/unversioned/helper.go b/pkg/client/unversioned/helper.go deleted file mode 100644 index ca0fc2c70d4..00000000000 --- a/pkg/client/unversioned/helper.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2014 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 unversioned - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" - restclient "k8s.io/client-go/rest" - "k8s.io/kubernetes/pkg/api/legacyscheme" - // Import solely to initialize client auth plugins. - _ "k8s.io/client-go/plugin/pkg/client/auth" -) - -const ( - legacyAPIPath = "/api" - defaultAPIPath = "/apis" -) - -// SetKubernetesDefaults sets default values on the provided client config for accessing the -// Kubernetes API or returns an error if any of the defaults are impossible or invalid. -// TODO: this method needs to be split into one that sets defaults per group, expected to be fix in PR "Refactoring clientcache.go and helper.go #14592" -func SetKubernetesDefaults(config *restclient.Config) error { - if config.APIPath == "" { - config.APIPath = legacyAPIPath - } - // TODO chase down uses and tolerate nil - if config.GroupVersion == nil { - config.GroupVersion = &schema.GroupVersion{} - } - if config.NegotiatedSerializer == nil { - config.NegotiatedSerializer = legacyscheme.Codecs - } - return restclient.SetKubernetesDefaults(config) -} - -func setGroupDefaults(groupName string, config *restclient.Config) error { - config.APIPath = defaultAPIPath - if config.UserAgent == "" { - config.UserAgent = restclient.DefaultKubernetesUserAgent() - } - if config.GroupVersion == nil || config.GroupVersion.Group != groupName { - g, err := legacyscheme.Registry.Group(groupName) - if err != nil { - return err - } - copyGroupVersion := g.GroupVersion - config.GroupVersion = ©GroupVersion - } - if config.NegotiatedSerializer == nil { - config.NegotiatedSerializer = legacyscheme.Codecs - } - return nil -} diff --git a/pkg/client/unversioned/helper_test.go b/pkg/client/unversioned/helper_test.go deleted file mode 100644 index 4b62c3bfc83..00000000000 --- a/pkg/client/unversioned/helper_test.go +++ /dev/null @@ -1,183 +0,0 @@ -/* -Copyright 2014 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 unversioned - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "reflect" - "testing" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - restclient "k8s.io/client-go/rest" - "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" - api "k8s.io/kubernetes/pkg/apis/core" -) - -func TestSetKubernetesDefaults(t *testing.T) { - testCases := []struct { - Config restclient.Config - After restclient.Config - Err bool - }{ - { - restclient.Config{}, - restclient.Config{ - APIPath: "/api", - ContentConfig: restclient.ContentConfig{ - GroupVersion: &schema.GroupVersion{}, - NegotiatedSerializer: testapi.Default.NegotiatedSerializer(), - }, - }, - false, - }, - // Add this test back when we fixed config and SetKubernetesDefaults - // { - // restclient.Config{ - // GroupVersion: &schema.GroupVersion{Group: "not.a.group", Version: "not_an_api"}, - // }, - // restclient.Config{}, - // true, - // }, - } - for _, testCase := range testCases { - val := &testCase.Config - err := SetKubernetesDefaults(val) - val.UserAgent = "" - switch { - case err == nil && testCase.Err: - t.Errorf("expected error but was nil") - continue - case err != nil && !testCase.Err: - t.Errorf("unexpected error %v", err) - continue - case err != nil: - continue - } - if !reflect.DeepEqual(*val, testCase.After) { - t.Errorf("unexpected result object: %#v", val) - } - } -} - -func TestHelperGetServerAPIVersions(t *testing.T) { - expect := []string{"v1", "v2", "v3"} - APIVersions := metav1.APIVersions{Versions: expect} - expect = append(expect, "group1/v1", "group1/v2", "group2/v1", "group2/v2") - APIGroupList := metav1.APIGroupList{ - Groups: []metav1.APIGroup{ - { - Versions: []metav1.GroupVersionForDiscovery{ - { - GroupVersion: "group1/v1", - }, - { - GroupVersion: "group1/v2", - }, - }, - }, - { - Versions: []metav1.GroupVersionForDiscovery{ - { - GroupVersion: "group2/v1", - }, - { - GroupVersion: "group2/v2", - }, - }, - }, - }, - } - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - var output []byte - var err error - switch req.URL.Path { - case "/api": - output, err = json.Marshal(APIVersions) - - case "/apis": - output, err = json.Marshal(APIGroupList) - } - 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) - })) - defer server.Close() - got, err := restclient.ServerAPIVersions(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Group: "invalid version", Version: "one"}, NegotiatedSerializer: testapi.Default.NegotiatedSerializer()}}) - 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 TestSetsCodec(t *testing.T) { - testCases := map[string]struct { - Err bool - Prefix string - NegotiatedSerializer runtime.NegotiatedSerializer - }{ - legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.Version: { - Err: false, - Prefix: "/api/" + legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.Version, - NegotiatedSerializer: testapi.Default.NegotiatedSerializer(), - }, - // Add this test back when we fixed config and SetKubernetesDefaults - // "invalidVersion": {true, "", nil}, - } - for version, expected := range testCases { - conf := &restclient.Config{ - Host: "127.0.0.1", - ContentConfig: restclient.ContentConfig{ - GroupVersion: &schema.GroupVersion{Version: version}, - }, - } - - var versionedPath string - err := SetKubernetesDefaults(conf) - if err == nil { - _, versionedPath, err = restclient.DefaultServerURL(conf.Host, conf.APIPath, *conf.GroupVersion, false) - } - - switch { - case err == nil && expected.Err: - t.Errorf("expected error but was nil") - continue - case err != nil && !expected.Err: - t.Errorf("unexpected error %v", err) - continue - case err != nil: - continue - } - if e, a := expected.Prefix, versionedPath; e != a { - t.Errorf("expected %#v, got %#v", e, a) - } - if e, a := expected.NegotiatedSerializer, conf.NegotiatedSerializer; !reflect.DeepEqual(e, a) { - t.Errorf("expected %#v, got %#v", e, a) - } - } -} diff --git a/pkg/client/unversioned/testclient/simple/BUILD b/pkg/client/unversioned/testclient/simple/BUILD deleted file mode 100644 index 788e07aeec4..00000000000 --- a/pkg/client/unversioned/testclient/simple/BUILD +++ /dev/null @@ -1,38 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = ["simple_testclient.go"], - importpath = "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple", - deps = [ - "//pkg/api/legacyscheme:go_default_library", - "//pkg/api/testapi:go_default_library", - "//pkg/apis/core:go_default_library", - "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//vendor/k8s.io/client-go/rest:go_default_library", - "//vendor/k8s.io/client-go/util/testing:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/pkg/client/unversioned/testclient/simple/simple_testclient.go b/pkg/client/unversioned/testclient/simple/simple_testclient.go deleted file mode 100644 index 17160aa3f29..00000000000 --- a/pkg/client/unversioned/testclient/simple/simple_testclient.go +++ /dev/null @@ -1,224 +0,0 @@ -/* -Copyright 2015 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 simple - -import ( - "net/http/httptest" - "net/url" - "path" - "reflect" - "strings" - "testing" - - apiequality "k8s.io/apimachinery/pkg/api/equality" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/fields" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" - restclient "k8s.io/client-go/rest" - utiltesting "k8s.io/client-go/util/testing" - "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/api/testapi" - api "k8s.io/kubernetes/pkg/apis/core" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" -) - -const NameRequiredError = "resource name may not be empty" - -type Request struct { - Method string - Path string - Header string - Query url.Values - Body runtime.Object - RawBody *string -} - -type Response struct { - StatusCode int - Body runtime.Object - RawBody *string -} - -type Client struct { - Clientset *clientset.Clientset - Request Request - Response Response - Error bool - Created bool - server *httptest.Server - handler *utiltesting.FakeHandler - // For query args, an optional function to validate the contents - // useful when the contents can change but still be correct. - // Maps from query arg key to validator. - // If no validator is present, string equality is used. - QueryValidator map[string]func(string, string) bool - - // If your object could exist in multiple groups, set this to - // correspond to the URL you're testing it with. - ResourceGroup string -} - -func (c *Client) Setup(t *testing.T) *Client { - c.handler = &utiltesting.FakeHandler{ - StatusCode: c.Response.StatusCode, - } - if responseBody := c.body(t, c.Response.Body, c.Response.RawBody); responseBody != nil { - c.handler.ResponseBody = *responseBody - } - c.server = httptest.NewServer(c.handler) - if c.Clientset == nil { - c.Clientset = clientset.NewForConfigOrDie(&restclient.Config{Host: c.server.URL}) - } - c.QueryValidator = map[string]func(string, string) bool{} - return c -} - -func (c *Client) Close() { - if c.server != nil { - c.server.Close() - } -} - -func (c *Client) ServerURL() string { - return c.server.URL -} - -func (c *Client) Validate(t *testing.T, received runtime.Object, err error) { - c.ValidateCommon(t, err) - - if c.Response.Body != nil && !apiequality.Semantic.DeepDerivative(c.Response.Body, received) { - t.Errorf("bad response for request %#v: \nexpected %#v\ngot %#v\n", c.Request, c.Response.Body, received) - } -} - -func (c *Client) ValidateRaw(t *testing.T, received []byte, err error) { - c.ValidateCommon(t, err) - - if c.Response.Body != nil && !reflect.DeepEqual(c.Response.Body, received) { - t.Errorf("bad response for request %#v: expected %#v, got %#v", c.Request, c.Response.Body, received) - } -} - -func (c *Client) ValidateCommon(t *testing.T, err error) { - if c.Error { - if err == nil { - t.Errorf("error expected for %#v, got none", c.Request) - } - return - } - if err != nil { - t.Errorf("no error expected for %#v, got: %v", c.Request, err) - } - - if c.handler.RequestReceived == nil { - t.Errorf("handler had an empty request, %#v", c) - return - } - - requestBody := c.body(t, c.Request.Body, c.Request.RawBody) - actualQuery := c.handler.RequestReceived.URL.Query() - t.Logf("got query: %v", actualQuery) - t.Logf("path: %v", c.Request.Path) - // We check the query manually, so blank it out so that FakeHandler.ValidateRequest - // won't check it. - c.handler.RequestReceived.URL.RawQuery = "" - c.handler.ValidateRequest(t, path.Join(c.Request.Path), c.Request.Method, requestBody) - for key, values := range c.Request.Query { - validator, ok := c.QueryValidator[key] - if !ok { - switch key { - case metav1.LabelSelectorQueryParam(legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.String()): - validator = ValidateLabels - case metav1.FieldSelectorQueryParam(legacyscheme.Registry.GroupOrDie(api.GroupName).GroupVersion.String()): - validator = validateFields - default: - validator = func(a, b string) bool { return a == b } - } - } - observed := actualQuery.Get(key) - wanted := strings.Join(values, "") - if !validator(wanted, observed) { - t.Errorf("Unexpected query arg for key: %s. Expected %s, Received %s", key, wanted, observed) - } - } - if c.Request.Header != "" { - if c.handler.RequestReceived.Header.Get(c.Request.Header) == "" { - t.Errorf("header %q not found in request %#v", c.Request.Header, c.handler.RequestReceived) - } - } - - if expected, received := requestBody, c.handler.RequestBody; expected != nil && *expected != received { - t.Errorf("bad body for request %#v: expected %s, got %s", c.Request, *expected, received) - } -} - -// buildQueryValues is a convenience function for knowing if a namespace should be in a query param or not -func BuildQueryValues(query url.Values) url.Values { - v := url.Values{} - if query != nil { - for key, values := range query { - for _, value := range values { - v.Add(key, value) - } - } - } - return v -} - -func ValidateLabels(a, b string) bool { - sA, eA := labels.Parse(a) - if eA != nil { - return false - } - sB, eB := labels.Parse(b) - if eB != nil { - return false - } - return sA.String() == sB.String() -} - -func validateFields(a, b string) bool { - sA, _ := fields.ParseSelector(a) - sB, _ := fields.ParseSelector(b) - return sA.String() == sB.String() -} - -func (c *Client) body(t *testing.T, obj runtime.Object, raw *string) *string { - if obj != nil { - fqKinds, _, err := legacyscheme.Scheme.ObjectKinds(obj) - if err != nil { - t.Errorf("unexpected encoding error: %v", err) - } - groupName := fqKinds[0].GroupVersion().Group - if c.ResourceGroup != "" { - groupName = c.ResourceGroup - } - var bs []byte - g, found := testapi.Groups[groupName] - if !found { - t.Errorf("Group %s is not registered in testapi", groupName) - } - bs, err = runtime.Encode(g.Codec(), obj) - if err != nil { - t.Errorf("unexpected encoding error: %v", err) - } - body := string(bs) - return &body - } - return raw -} diff --git a/pkg/kubectl/BUILD b/pkg/kubectl/BUILD index 9bfaf2fc7de..02f53b84405 100644 --- a/pkg/kubectl/BUILD +++ b/pkg/kubectl/BUILD @@ -98,6 +98,7 @@ go_library( "autoscale.go", "bash_comp_utils.go", "clusterrolebinding.go", + "conditions.go", "configmap.go", "delete.go", "deployment.go", @@ -129,6 +130,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/kubectl", deps = [ "//pkg/api/legacyscheme:go_default_library", + "//pkg/api/pod:go_default_library", "//pkg/api/v1/pod:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/batch:go_default_library", @@ -140,7 +142,6 @@ go_library( "//pkg/client/clientset_generated/internalclientset/typed/batch/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion:go_default_library", - "//pkg/client/unversioned:go_default_library", "//pkg/controller/daemon:go_default_library", "//pkg/controller/deployment/util:go_default_library", "//pkg/controller/statefulset:go_default_library", diff --git a/pkg/kubectl/cmd/BUILD b/pkg/kubectl/cmd/BUILD index 4f76d722425..d25b6af46e1 100644 --- a/pkg/kubectl/cmd/BUILD +++ b/pkg/kubectl/cmd/BUILD @@ -75,7 +75,6 @@ go_library( "//pkg/apis/core/validation:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", - "//pkg/client/unversioned:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/apply/parse:go_default_library", "//pkg/kubectl/apply/strategy:go_default_library", diff --git a/pkg/kubectl/cmd/run.go b/pkg/kubectl/cmd/run.go index 46c98e8ebd9..59eca16bac9 100644 --- a/pkg/kubectl/cmd/run.go +++ b/pkg/kubectl/cmd/run.go @@ -34,7 +34,6 @@ import ( "k8s.io/apimachinery/pkg/watch" api "k8s.io/kubernetes/pkg/apis/core" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" - conditions "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -339,7 +338,7 @@ func RunRun(f cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *c leaveStdinOpen := cmdutil.GetFlagBool(cmd, "leave-stdin-open") waitForExitCode := !leaveStdinOpen && restartPolicy == api.RestartPolicyNever if waitForExitCode { - pod, err = waitForPod(clientset.Core(), attachablePod.Namespace, attachablePod.Name, conditions.PodCompleted) + pod, err = waitForPod(clientset.Core(), attachablePod.Namespace, attachablePod.Name, kubectl.PodCompleted) if err != nil { return err } @@ -442,8 +441,8 @@ func waitForPod(podClient coreclient.PodsGetter, ns, name string, exitCondition } func handleAttachPod(f cmdutil.Factory, podClient coreclient.PodsGetter, ns, name string, opts *AttachOptions) error { - pod, err := waitForPod(podClient, ns, name, conditions.PodRunningAndReady) - if err != nil && err != conditions.ErrPodCompleted { + pod, err := waitForPod(podClient, ns, name, kubectl.PodRunningAndReady) + if err != nil && err != kubectl.ErrPodCompleted { return err } diff --git a/pkg/kubectl/cmd/util/BUILD b/pkg/kubectl/cmd/util/BUILD index d031d2d2ebe..5abbe5b5bae 100644 --- a/pkg/kubectl/cmd/util/BUILD +++ b/pkg/kubectl/cmd/util/BUILD @@ -30,7 +30,6 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", - "//pkg/client/unversioned:go_default_library", "//pkg/controller:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/categories:go_default_library", diff --git a/pkg/kubectl/cmd/util/clientcache.go b/pkg/kubectl/cmd/util/clientcache.go index 124216d2e8f..4019f0fbc24 100644 --- a/pkg/kubectl/cmd/util/clientcache.go +++ b/pkg/kubectl/cmd/util/clientcache.go @@ -24,8 +24,8 @@ import ( "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" + "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - oldclient "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/version" ) @@ -150,7 +150,7 @@ func (c *ClientCache) clientConfigForVersion(requiredVersion *schema.GroupVersio } // TODO this isn't what we want. Each clientset should be setting defaults as it sees fit. - oldclient.SetKubernetesDefaults(&config) + setKubernetesDefaults(&config) if requiredVersion != nil { c.configs[*requiredVersion] = copyConfig(&config) @@ -165,6 +165,22 @@ func (c *ClientCache) clientConfigForVersion(requiredVersion *schema.GroupVersio return copyConfig(&config), nil } +// setKubernetesDefaults sets default values on the provided client config for accessing the +// Kubernetes API or returns an error if any of the defaults are impossible or invalid. +func setKubernetesDefaults(config *restclient.Config) error { + if config.APIPath == "" { + config.APIPath = "/api" + } + // TODO chase down uses and tolerate nil + if config.GroupVersion == nil { + config.GroupVersion = &schema.GroupVersion{} + } + if config.NegotiatedSerializer == nil { + config.NegotiatedSerializer = legacyscheme.Codecs + } + return restclient.SetKubernetesDefaults(config) +} + func copyConfig(in *restclient.Config) *restclient.Config { configCopy := *in copyGroupVersion := *configCopy.GroupVersion diff --git a/pkg/kubectl/cmd/util/factory_object_mapping.go b/pkg/kubectl/cmd/util/factory_object_mapping.go index 2357ae4a437..835fe799298 100644 --- a/pkg/kubectl/cmd/util/factory_object_mapping.go +++ b/pkg/kubectl/cmd/util/factory_object_mapping.go @@ -43,7 +43,6 @@ import ( "k8s.io/kubernetes/pkg/apis/batch" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/extensions" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/categories" @@ -132,7 +131,7 @@ func (f *ring1Factory) ClientForMapping(mapping *meta.RESTMapping) (resource.RES if err != nil { return nil, err } - if err := client.SetKubernetesDefaults(cfg); err != nil { + if err := setKubernetesDefaults(cfg); err != nil { return nil, err } gvk := mapping.GroupVersionKind diff --git a/pkg/client/unversioned/conditions.go b/pkg/kubectl/conditions.go similarity index 99% rename from pkg/client/unversioned/conditions.go rename to pkg/kubectl/conditions.go index 042d13a6fa8..666b248f416 100644 --- a/pkg/client/unversioned/conditions.go +++ b/pkg/kubectl/conditions.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package unversioned +package kubectl import ( "fmt" diff --git a/pkg/kubectl/delete_test.go b/pkg/kubectl/delete_test.go index d250d1e5483..379023fc7f3 100644 --- a/pkg/kubectl/delete_test.go +++ b/pkg/kubectl/delete_test.go @@ -588,7 +588,7 @@ func (c *reaperCoreFake) Pods(namespace string) coreclient.PodInterface { return pods } -func pod() *api.Pod { +func newPod() *api.Pod { return &api.Pod{ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceDefault, Name: "foo"}} } @@ -602,7 +602,7 @@ func TestSimpleStop(t *testing.T) { }{ { fake: &reaperFake{ - Clientset: fake.NewSimpleClientset(pod()), + Clientset: fake.NewSimpleClientset(newPod()), }, kind: api.Kind("Pod"), actions: []testcore.Action{ @@ -624,7 +624,7 @@ func TestSimpleStop(t *testing.T) { }, { fake: &reaperFake{ - Clientset: fake.NewSimpleClientset(pod()), + Clientset: fake.NewSimpleClientset(newPod()), noDeletePod: true, }, kind: api.Kind("Pod"), diff --git a/pkg/kubectl/rolling_updater.go b/pkg/kubectl/rolling_updater.go index 1a1f8dfb330..3d640184c48 100644 --- a/pkg/kubectl/rolling_updater.go +++ b/pkg/kubectl/rolling_updater.go @@ -36,7 +36,6 @@ import ( api "k8s.io/kubernetes/pkg/apis/core" apiv1 "k8s.io/kubernetes/pkg/apis/core/v1" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" - client "k8s.io/kubernetes/pkg/client/unversioned" deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/kubectl/util" ) @@ -513,7 +512,7 @@ func (r *RollingUpdater) cleanupWithClients(oldRc, newRc *api.ReplicationControl return err } - if err = wait.Poll(config.Interval, config.Timeout, client.ControllerHasDesiredReplicas(r.rcClient, newRc)); err != nil { + if err = wait.Poll(config.Interval, config.Timeout, ControllerHasDesiredReplicas(r.rcClient, newRc)); err != nil { return err } newRc, err = r.rcClient.ReplicationControllers(r.ns).Get(newRc.Name, metav1.GetOptions{}) diff --git a/pkg/kubectl/scale.go b/pkg/kubectl/scale.go index 771648669e3..d92f21427f9 100644 --- a/pkg/kubectl/scale.go +++ b/pkg/kubectl/scale.go @@ -38,7 +38,6 @@ import ( batchclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/internalversion" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" extensionsclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion" - client "k8s.io/kubernetes/pkg/client/unversioned" ) // Scaler provides an interface for resources that can be scaled. @@ -311,7 +310,7 @@ func (scaler *ReplicaSetScaler) Scale(namespace, name string, newSize uint, prec if rs.Initializers != nil { return nil } - err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, client.ReplicaSetHasDesiredReplicas(scaler.c, rs)) + err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, ReplicaSetHasDesiredReplicas(scaler.c, rs)) if err == wait.ErrWaitTimeout { return fmt.Errorf("timed out waiting for %q to be synced", name) @@ -383,7 +382,7 @@ func (scaler *StatefulSetScaler) Scale(namespace, name string, newSize uint, pre if job.Initializers != nil { return nil } - err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, client.StatefulSetHasDesiredReplicas(scaler.c, job)) + err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, StatefulSetHasDesiredReplicas(scaler.c, job)) if err == wait.ErrWaitTimeout { return fmt.Errorf("timed out waiting for %q to be synced", name) } @@ -440,7 +439,7 @@ func (scaler *jobScaler) Scale(namespace, name string, newSize uint, preconditio if err != nil { return err } - err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, client.JobHasDesiredParallelism(scaler.c, job)) + err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, JobHasDesiredParallelism(scaler.c, job)) if err == wait.ErrWaitTimeout { return fmt.Errorf("timed out waiting for %q to be synced", name) } @@ -511,7 +510,7 @@ func (scaler *DeploymentScaler) Scale(namespace, name string, newSize uint, prec if err != nil { return err } - err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, client.DeploymentHasDesiredReplicas(scaler.c, deployment)) + err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, DeploymentHasDesiredReplicas(scaler.c, deployment)) if err == wait.ErrWaitTimeout { return fmt.Errorf("timed out waiting for %q to be synced", name) }