From 2612e0c78ad18ac87bbd200d547100cf99f36089 Mon Sep 17 00:00:00 2001 From: Dmitry Shulyak Date: Fri, 14 Apr 2017 12:33:57 +0300 Subject: [PATCH 1/5] Move client/unversioned/remotecommand to client-go Module remotecommand originally part of kubernetes/pkg/client/unversioned was moved to client-go/tools, and will be used as authoritative in kubectl, e2e and other places. Module remotecommand relies on util/exec module which will be copied to client-go/pkg/util --- hack/.linted_packages | 1 - pkg/client/tests/BUILD | 2 +- pkg/client/tests/portfoward_test.go | 2 +- pkg/client/tests/remotecommand_test.go | 2 +- pkg/client/unversioned/BUILD | 1 - pkg/kubectl/cmd/BUILD | 4 +- pkg/kubectl/cmd/attach.go | 2 +- pkg/kubectl/cmd/attach_test.go | 2 +- pkg/kubectl/cmd/exec.go | 2 +- pkg/kubectl/cmd/exec_test.go | 2 +- pkg/kubectl/cmd/portforward.go | 2 +- pkg/kubelet/BUILD | 2 +- pkg/kubelet/container/BUILD | 4 +- pkg/kubelet/container/resize.go | 2 +- pkg/kubelet/container/runtime.go | 4 +- pkg/kubelet/container/testing/BUILD | 2 +- pkg/kubelet/container/testing/fake_runtime.go | 2 +- pkg/kubelet/container/testing/runtime_mock.go | 2 +- pkg/kubelet/dockershim/BUILD | 6 +- pkg/kubelet/dockershim/docker_streaming.go | 6 +- pkg/kubelet/dockershim/exec.go | 2 +- pkg/kubelet/kubelet_pods.go | 2 +- pkg/kubelet/rkt/BUILD | 2 +- pkg/kubelet/rkt/rkt.go | 2 +- pkg/kubelet/server/BUILD | 4 +- pkg/kubelet/server/remotecommand/BUILD | 2 +- pkg/kubelet/server/remotecommand/attach.go | 2 +- pkg/kubelet/server/remotecommand/exec.go | 2 +- .../server/remotecommand/httpstream.go | 2 +- pkg/kubelet/server/server.go | 2 +- pkg/kubelet/server/server_test.go | 2 +- pkg/kubelet/server/streaming/BUILD | 8 +- pkg/kubelet/server/streaming/server.go | 4 +- pkg/kubelet/server/streaming/server_test.go | 4 +- pkg/util/term/BUILD | 2 +- pkg/util/term/resize.go | 2 +- pkg/util/term/resizeevents.go | 2 +- pkg/util/term/setsize.go | 2 +- .../src/k8s.io/client-go/pkg/util/exec/BUILD | 14 ++ .../k8s.io/client-go/pkg/util/exec/exec.go | 188 ++++++++++++++++++ .../client-go/tools}/remotecommand/BUILD | 47 ++--- .../client-go/tools}/remotecommand/doc.go | 2 +- .../tools}/remotecommand/errorstream.go | 0 .../tools}/remotecommand/remotecommand.go | 0 .../client-go/tools}/remotecommand/resize.go | 0 .../client-go/tools}/remotecommand/v1.go | 2 +- .../client-go/tools}/remotecommand/v2.go | 2 +- .../client-go/tools}/remotecommand/v2_test.go | 2 +- .../client-go/tools}/remotecommand/v3.go | 2 +- .../client-go/tools}/remotecommand/v4.go | 2 +- .../client-go/tools}/remotecommand/v4_test.go | 0 test/e2e/framework/BUILD | 2 +- test/e2e/framework/exec_util.go | 2 +- test/test_owners.csv | 1 - 54 files changed, 277 insertions(+), 89 deletions(-) create mode 100644 staging/src/k8s.io/client-go/pkg/util/exec/BUILD create mode 100644 staging/src/k8s.io/client-go/pkg/util/exec/exec.go rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/BUILD (79%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/doc.go (89%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/errorstream.go (100%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/remotecommand.go (100%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/resize.go (100%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/v1.go (99%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/v2.go (99%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/v2_test.go (99%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/v3.go (98%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/v4.go (98%) rename {pkg/client/unversioned => staging/src/k8s.io/client-go/tools}/remotecommand/v4_test.go (100%) diff --git a/hack/.linted_packages b/hack/.linted_packages index 32ef124db7e..fc3af381af9 100644 --- a/hack/.linted_packages +++ b/hack/.linted_packages @@ -170,7 +170,6 @@ pkg/client/listers/storage/v1beta1 pkg/client/metrics pkg/client/metrics/prometheus pkg/client/unversioned -pkg/client/unversioned/remotecommand pkg/cloudprovider/providers pkg/cloudprovider/providers/azure pkg/cloudprovider/providers/cloudstack diff --git a/pkg/client/tests/BUILD b/pkg/client/tests/BUILD index c94feb489b9..b2778e9083a 100644 --- a/pkg/client/tests/BUILD +++ b/pkg/client/tests/BUILD @@ -25,7 +25,6 @@ go_test( "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/clientset_generated/internalclientset/fake:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/kubelet/server/portforward:go_default_library", "//pkg/kubelet/server/remotecommand:go_default_library", "//vendor/github.com/stretchr/testify/require:go_default_library", @@ -40,6 +39,7 @@ go_test( "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/client-go/tools/portforward:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/k8s.io/client-go/util/testing:go_default_library", ], ) diff --git a/pkg/client/tests/portfoward_test.go b/pkg/client/tests/portfoward_test.go index 077901ae41b..35d633f8008 100644 --- a/pkg/client/tests/portfoward_test.go +++ b/pkg/client/tests/portfoward_test.go @@ -33,7 +33,7 @@ import ( "k8s.io/apimachinery/pkg/types" restclient "k8s.io/client-go/rest" . "k8s.io/client-go/tools/portforward" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/kubelet/server/portforward" ) diff --git a/pkg/client/tests/remotecommand_test.go b/pkg/client/tests/remotecommand_test.go index f30283a7901..cd89b81e0fa 100644 --- a/pkg/client/tests/remotecommand_test.go +++ b/pkg/client/tests/remotecommand_test.go @@ -36,9 +36,9 @@ import ( "k8s.io/apimachinery/pkg/util/httpstream" remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" restclient "k8s.io/client-go/rest" + remoteclient "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" - remoteclient "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" "k8s.io/kubernetes/pkg/kubelet/server/remotecommand" ) diff --git a/pkg/client/unversioned/BUILD b/pkg/client/unversioned/BUILD index 7c479886a88..3f1f8e4c9a1 100644 --- a/pkg/client/unversioned/BUILD +++ b/pkg/client/unversioned/BUILD @@ -61,7 +61,6 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//pkg/client/unversioned/remotecommand:all-srcs", "//pkg/client/unversioned/testclient/simple:all-srcs", ], tags = ["automanaged"], diff --git a/pkg/kubectl/cmd/BUILD b/pkg/kubectl/cmd/BUILD index b99cb0951cf..47d3316e435 100644 --- a/pkg/kubectl/cmd/BUILD +++ b/pkg/kubectl/cmd/BUILD @@ -84,7 +84,6 @@ go_library( "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/rbac/internalversion:go_default_library", "//pkg/client/unversioned:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/cmd/auth:go_default_library", "//pkg/kubectl/cmd/config:go_default_library", @@ -142,6 +141,7 @@ go_library( "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", "//vendor/k8s.io/client-go/tools/portforward:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", ], ) @@ -206,7 +206,6 @@ go_test( "//pkg/apis/extensions:go_default_library", "//pkg/apis/policy:go_default_library", "//pkg/apis/rbac:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", @@ -241,6 +240,7 @@ go_test( "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/rest/fake:go_default_library", "//vendor/k8s.io/client-go/rest/watch:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/k8s.io/heapster/metrics/apis/metrics/v1alpha1:go_default_library", ], ) diff --git a/pkg/kubectl/cmd/attach.go b/pkg/kubectl/cmd/attach.go index d5b8a5276a8..ecf42ae9d84 100644 --- a/pkg/kubectl/cmd/attach.go +++ b/pkg/kubectl/cmd/attach.go @@ -29,9 +29,9 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" diff --git a/pkg/kubectl/cmd/attach_test.go b/pkg/kubectl/cmd/attach_test.go index 49d80a4d06d..d5f32249380 100644 --- a/pkg/kubectl/cmd/attach_test.go +++ b/pkg/kubectl/cmd/attach_test.go @@ -33,8 +33,8 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/pkg/kubectl/cmd/exec.go b/pkg/kubectl/cmd/exec.go index fbee7685179..346b0158beb 100644 --- a/pkg/kubectl/cmd/exec.go +++ b/pkg/kubectl/cmd/exec.go @@ -27,9 +27,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/util/i18n" diff --git a/pkg/kubectl/cmd/exec_test.go b/pkg/kubectl/cmd/exec_test.go index 6ba9410cddc..9b50f9c6dc5 100644 --- a/pkg/kubectl/cmd/exec_test.go +++ b/pkg/kubectl/cmd/exec_test.go @@ -32,8 +32,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/rest/fake" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" "k8s.io/kubernetes/pkg/util/term" ) diff --git a/pkg/kubectl/cmd/portforward.go b/pkg/kubectl/cmd/portforward.go index cf8b452bc57..75e9e33ef37 100644 --- a/pkg/kubectl/cmd/portforward.go +++ b/pkg/kubectl/cmd/portforward.go @@ -28,9 +28,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/portforward" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/util/i18n" diff --git a/pkg/kubelet/BUILD b/pkg/kubelet/BUILD index ac898ded8d0..3bb4a3443f0 100644 --- a/pkg/kubelet/BUILD +++ b/pkg/kubelet/BUILD @@ -46,7 +46,6 @@ go_library( "//pkg/capabilities:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/listers/core/v1:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/features:go_default_library", "//pkg/fieldpath:go_default_library", @@ -134,6 +133,7 @@ go_library( "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/k8s.io/client-go/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", "//vendor/k8s.io/client-go/util/integer:go_default_library", diff --git a/pkg/kubelet/container/BUILD b/pkg/kubelet/container/BUILD index 4d5e83269be..6ce5b4a47d4 100644 --- a/pkg/kubelet/container/BUILD +++ b/pkg/kubelet/container/BUILD @@ -29,8 +29,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/api/v1/ref:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", - "//pkg/kubelet/apis/cri/v1alpha1:go_default_library", + "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", "//pkg/kubelet/events:go_default_library", "//pkg/kubelet/util/format:go_default_library", "//pkg/kubelet/util/ioutils:go_default_library", @@ -46,6 +45,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", ], ) diff --git a/pkg/kubelet/container/resize.go b/pkg/kubelet/container/resize.go index b880f8fbdd2..d7b75eedec0 100644 --- a/pkg/kubelet/container/resize.go +++ b/pkg/kubelet/container/resize.go @@ -18,7 +18,7 @@ package container import ( "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" ) // handleResizing spawns a goroutine that processes the resize channel, calling resizeFunc for each diff --git a/pkg/kubelet/container/runtime.go b/pkg/kubelet/container/runtime.go index 6d8b7204ef4..9a45ab75a35 100644 --- a/pkg/kubelet/container/runtime.go +++ b/pkg/kubelet/container/runtime.go @@ -26,10 +26,10 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/remotecommand" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" "k8s.io/kubernetes/pkg/volume" ) diff --git a/pkg/kubelet/container/testing/BUILD b/pkg/kubelet/container/testing/BUILD index 29d3839ba40..b269c6a5431 100644 --- a/pkg/kubelet/container/testing/BUILD +++ b/pkg/kubelet/container/testing/BUILD @@ -20,12 +20,12 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/api/v1:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/volume:go_default_library", "//vendor/github.com/golang/mock/gomock:go_default_library", "//vendor/github.com/stretchr/testify/mock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", ], ) diff --git a/pkg/kubelet/container/testing/fake_runtime.go b/pkg/kubelet/container/testing/fake_runtime.go index ceaaaf076f8..c05af6aeb9e 100644 --- a/pkg/kubelet/container/testing/fake_runtime.go +++ b/pkg/kubelet/container/testing/fake_runtime.go @@ -25,9 +25,9 @@ import ( "time" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/remotecommand" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" . "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/volume" ) diff --git a/pkg/kubelet/container/testing/runtime_mock.go b/pkg/kubelet/container/testing/runtime_mock.go index 5f05d8c20af..2864152062b 100644 --- a/pkg/kubelet/container/testing/runtime_mock.go +++ b/pkg/kubelet/container/testing/runtime_mock.go @@ -22,9 +22,9 @@ import ( "github.com/stretchr/testify/mock" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/remotecommand" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" . "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/volume" ) diff --git a/pkg/kubelet/dockershim/BUILD b/pkg/kubelet/dockershim/BUILD index 83cfe97c64c..de1582825ec 100644 --- a/pkg/kubelet/dockershim/BUILD +++ b/pkg/kubelet/dockershim/BUILD @@ -32,9 +32,8 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/api/v1/helper:go_default_library", "//pkg/apis/componentconfig:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", - "//pkg/kubelet/apis/cri:go_default_library", - "//pkg/kubelet/apis/cri/v1alpha1:go_default_library", + "//pkg/kubelet/api:go_default_library", + "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/dockershim/cm:go_default_library", @@ -67,6 +66,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", ], ) diff --git a/pkg/kubelet/dockershim/docker_streaming.go b/pkg/kubelet/dockershim/docker_streaming.go index 44cc30b2b8c..cfec6ef0e89 100644 --- a/pkg/kubelet/dockershim/docker_streaming.go +++ b/pkg/kubelet/dockershim/docker_streaming.go @@ -26,9 +26,11 @@ import ( "time" dockertypes "github.com/docker/engine-api/types" + "github.com/golang/glog" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" + + "k8s.io/client-go/tools/remotecommand" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/server/streaming" "k8s.io/kubernetes/pkg/kubelet/util/ioutils" diff --git a/pkg/kubelet/dockershim/exec.go b/pkg/kubelet/dockershim/exec.go index 3aee5e045fb..1d73a8a8d5c 100644 --- a/pkg/kubelet/dockershim/exec.go +++ b/pkg/kubelet/dockershim/exec.go @@ -26,7 +26,7 @@ import ( dockertypes "github.com/docker/engine-api/types" "github.com/golang/glog" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" utilexec "k8s.io/kubernetes/pkg/util/exec" "k8s.io/kubernetes/pkg/util/term" diff --git a/pkg/kubelet/kubelet_pods.go b/pkg/kubelet/kubelet_pods.go index 978bbc2d3c0..0af466cbcad 100644 --- a/pkg/kubelet/kubelet_pods.go +++ b/pkg/kubelet/kubelet_pods.go @@ -40,13 +40,13 @@ import ( "k8s.io/apimachinery/pkg/util/sets" utilvalidation "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" v1helper "k8s.io/kubernetes/pkg/api/v1/helper" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/api/v1/resource" "k8s.io/kubernetes/pkg/api/v1/validation" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" "k8s.io/kubernetes/pkg/fieldpath" "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" diff --git a/pkg/kubelet/rkt/BUILD b/pkg/kubelet/rkt/BUILD index 968b7781069..f8298914919 100644 --- a/pkg/kubelet/rkt/BUILD +++ b/pkg/kubelet/rkt/BUILD @@ -24,7 +24,6 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/api/v1:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/credentialprovider:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/events:go_default_library", @@ -58,6 +57,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", ], ) diff --git a/pkg/kubelet/rkt/rkt.go b/pkg/kubelet/rkt/rkt.go index 0ce8ee24cc6..e732ff21fce 100644 --- a/pkg/kubelet/rkt/rkt.go +++ b/pkg/kubelet/rkt/rkt.go @@ -47,9 +47,9 @@ import ( "k8s.io/apimachinery/pkg/util/uuid" utilwait "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/remotecommand" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" "k8s.io/kubernetes/pkg/credentialprovider" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" diff --git a/pkg/kubelet/server/BUILD b/pkg/kubelet/server/BUILD index 36fc30e42da..c823ac4f80d 100644 --- a/pkg/kubelet/server/BUILD +++ b/pkg/kubelet/server/BUILD @@ -20,7 +20,6 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/api/v1/validation:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/server/portforward:go_default_library", @@ -48,6 +47,7 @@ go_library( "//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library", "//vendor/k8s.io/apiserver/pkg/server/httplog:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/flushwriter:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", ], ) @@ -63,7 +63,6 @@ go_test( deps = [ "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/container/testing:go_default_library", @@ -84,6 +83,7 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apiserver/pkg/authentication/user:go_default_library", "//vendor/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/k8s.io/client-go/util/testing:go_default_library", ], ) diff --git a/pkg/kubelet/server/remotecommand/BUILD b/pkg/kubelet/server/remotecommand/BUILD index 041cf15bcaa..dd350d06518 100644 --- a/pkg/kubelet/server/remotecommand/BUILD +++ b/pkg/kubelet/server/remotecommand/BUILD @@ -19,7 +19,6 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/util/exec:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", @@ -31,6 +30,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apiserver/pkg/server/httplog:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/wsstream:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", ], ) diff --git a/pkg/kubelet/server/remotecommand/attach.go b/pkg/kubelet/server/remotecommand/attach.go index 2c7736b0a77..e266f34fef4 100644 --- a/pkg/kubelet/server/remotecommand/attach.go +++ b/pkg/kubelet/server/remotecommand/attach.go @@ -26,7 +26,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" ) // Attacher knows how to attach to a running container in a pod. diff --git a/pkg/kubelet/server/remotecommand/exec.go b/pkg/kubelet/server/remotecommand/exec.go index 8c248979c1d..8d14a937a3b 100644 --- a/pkg/kubelet/server/remotecommand/exec.go +++ b/pkg/kubelet/server/remotecommand/exec.go @@ -27,7 +27,7 @@ import ( "k8s.io/apimachinery/pkg/types" remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" utilexec "k8s.io/kubernetes/pkg/util/exec" ) diff --git a/pkg/kubelet/server/remotecommand/httpstream.go b/pkg/kubelet/server/remotecommand/httpstream.go index 27a9fc4dbfc..f09b5e400b5 100644 --- a/pkg/kubelet/server/remotecommand/httpstream.go +++ b/pkg/kubelet/server/remotecommand/httpstream.go @@ -31,8 +31,8 @@ import ( remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apiserver/pkg/util/wsstream" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" "github.com/golang/glog" ) diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go index a395431ce8a..bbb04dc2fb9 100644 --- a/pkg/kubelet/server/server.go +++ b/pkg/kubelet/server/server.go @@ -48,10 +48,10 @@ import ( "k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/httplog" "k8s.io/apiserver/pkg/util/flushwriter" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/v1/validation" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/server/portforward" diff --git a/pkg/kubelet/server/server_test.go b/pkg/kubelet/server/server_test.go index da2be51d08a..c1a28ec5032 100644 --- a/pkg/kubelet/server/server_test.go +++ b/pkg/kubelet/server/server_test.go @@ -46,10 +46,10 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apiserver/pkg/authentication/user" "k8s.io/apiserver/pkg/authorization/authorizer" + "k8s.io/client-go/tools/remotecommand" utiltesting "k8s.io/client-go/util/testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainertesting "k8s.io/kubernetes/pkg/kubelet/container/testing" diff --git a/pkg/kubelet/server/streaming/BUILD b/pkg/kubelet/server/streaming/BUILD index d948b1d6470..6982ff1830a 100644 --- a/pkg/kubelet/server/streaming/BUILD +++ b/pkg/kubelet/server/streaming/BUILD @@ -17,8 +17,7 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/client/unversioned/remotecommand:go_default_library", - "//pkg/kubelet/apis/cri/v1alpha1:go_default_library", + "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", "//pkg/kubelet/server/portforward:go_default_library", "//pkg/kubelet/server/remotecommand:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", @@ -26,6 +25,7 @@ go_library( "//vendor/google.golang.org/grpc/codes:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/remotecommand:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -40,13 +40,13 @@ go_test( tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", - "//pkg/kubelet/apis/cri/v1alpha1:go_default_library", + "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", "//pkg/kubelet/server/portforward:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/require:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/remotecommand:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/kubelet/server/streaming/server.go b/pkg/kubelet/server/streaming/server.go index b026229a426..7291860fbe1 100644 --- a/pkg/kubelet/server/streaming/server.go +++ b/pkg/kubelet/server/streaming/server.go @@ -32,8 +32,8 @@ import ( "k8s.io/apimachinery/pkg/types" remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" + "k8s.io/client-go/tools/remotecommand" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" "k8s.io/kubernetes/pkg/kubelet/server/portforward" remotecommandserver "k8s.io/kubernetes/pkg/kubelet/server/remotecommand" ) diff --git a/pkg/kubelet/server/streaming/server_test.go b/pkg/kubelet/server/streaming/server_test.go index 5283a40902f..e7a89ff4575 100644 --- a/pkg/kubelet/server/streaming/server_test.go +++ b/pkg/kubelet/server/streaming/server_test.go @@ -32,9 +32,9 @@ import ( remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" kubeletportforward "k8s.io/kubernetes/pkg/kubelet/server/portforward" ) diff --git a/pkg/util/term/BUILD b/pkg/util/term/BUILD index 86d407f5995..e238ccfc48a 100644 --- a/pkg/util/term/BUILD +++ b/pkg/util/term/BUILD @@ -19,11 +19,11 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/util/interrupt:go_default_library", "//vendor/github.com/docker/docker/pkg/term:go_default_library", "//vendor/github.com/mitchellh/go-wordwrap:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", ], ) diff --git a/pkg/util/term/resize.go b/pkg/util/term/resize.go index e7aa2bb952b..7ca09a8586b 100644 --- a/pkg/util/term/resize.go +++ b/pkg/util/term/resize.go @@ -21,7 +21,7 @@ import ( "github.com/docker/docker/pkg/term" "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" ) // GetSize returns the current size of the user's terminal. If it isn't a terminal, diff --git a/pkg/util/term/resizeevents.go b/pkg/util/term/resizeevents.go index ac2faba0446..75e9690df71 100644 --- a/pkg/util/term/resizeevents.go +++ b/pkg/util/term/resizeevents.go @@ -24,7 +24,7 @@ import ( "syscall" "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" ) // monitorResizeEvents spawns a goroutine that waits for SIGWINCH signals (these indicate the diff --git a/pkg/util/term/setsize.go b/pkg/util/term/setsize.go index 32b8526259c..8cccd431a8c 100644 --- a/pkg/util/term/setsize.go +++ b/pkg/util/term/setsize.go @@ -20,7 +20,7 @@ package term import ( "github.com/docker/docker/pkg/term" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" ) // SetSize sets the terminal size associated with fd. diff --git a/staging/src/k8s.io/client-go/pkg/util/exec/BUILD b/staging/src/k8s.io/client-go/pkg/util/exec/BUILD new file mode 100644 index 00000000000..4976f6075a0 --- /dev/null +++ b/staging/src/k8s.io/client-go/pkg/util/exec/BUILD @@ -0,0 +1,14 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = ["exec.go"], + tags = ["automanaged"], +) diff --git a/staging/src/k8s.io/client-go/pkg/util/exec/exec.go b/staging/src/k8s.io/client-go/pkg/util/exec/exec.go new file mode 100644 index 00000000000..327ddf5bce0 --- /dev/null +++ b/staging/src/k8s.io/client-go/pkg/util/exec/exec.go @@ -0,0 +1,188 @@ +/* +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 exec + +import ( + "io" + osexec "os/exec" + "syscall" + "time" +) + +// ErrExecutableNotFound is returned if the executable is not found. +var ErrExecutableNotFound = osexec.ErrNotFound + +// Interface is an interface that presents a subset of the os/exec API. Use this +// when you want to inject fakeable/mockable exec behavior. +type Interface interface { + // Command returns a Cmd instance which can be used to run a single command. + // This follows the pattern of package os/exec. + Command(cmd string, args ...string) Cmd + + // LookPath wraps os/exec.LookPath + LookPath(file string) (string, error) +} + +// Cmd is an interface that presents an API that is very similar to Cmd from os/exec. +// As more functionality is needed, this can grow. Since Cmd is a struct, we will have +// to replace fields with get/set method pairs. +type Cmd interface { + // CombinedOutput runs the command and returns its combined standard output + // and standard error. This follows the pattern of package os/exec. + CombinedOutput() ([]byte, error) + // Output runs the command and returns standard output, but not standard err + Output() ([]byte, error) + SetDir(dir string) + SetStdin(in io.Reader) + SetStdout(out io.Writer) + // Stops the command by sending SIGTERM. It is not guaranteed the + // process will stop before this function returns. If the process is not + // responding, an internal timer function will send a SIGKILL to force + // terminate after 10 seconds. + Stop() +} + +// ExitError is an interface that presents an API similar to os.ProcessState, which is +// what ExitError from os/exec is. This is designed to make testing a bit easier and +// probably loses some of the cross-platform properties of the underlying library. +type ExitError interface { + String() string + Error() string + Exited() bool + ExitStatus() int +} + +// Implements Interface in terms of really exec()ing. +type executor struct{} + +// New returns a new Interface which will os/exec to run commands. +func New() Interface { + return &executor{} +} + +// Command is part of the Interface interface. +func (executor *executor) Command(cmd string, args ...string) Cmd { + return (*cmdWrapper)(osexec.Command(cmd, args...)) +} + +// LookPath is part of the Interface interface +func (executor *executor) LookPath(file string) (string, error) { + return osexec.LookPath(file) +} + +// Wraps exec.Cmd so we can capture errors. +type cmdWrapper osexec.Cmd + +func (cmd *cmdWrapper) SetDir(dir string) { + cmd.Dir = dir +} + +func (cmd *cmdWrapper) SetStdin(in io.Reader) { + cmd.Stdin = in +} + +func (cmd *cmdWrapper) SetStdout(out io.Writer) { + cmd.Stdout = out +} + +// CombinedOutput is part of the Cmd interface. +func (cmd *cmdWrapper) CombinedOutput() ([]byte, error) { + out, err := (*osexec.Cmd)(cmd).CombinedOutput() + if err != nil { + return out, handleError(err) + } + return out, nil +} + +func (cmd *cmdWrapper) Output() ([]byte, error) { + out, err := (*osexec.Cmd)(cmd).Output() + if err != nil { + return out, handleError(err) + } + return out, nil +} + +// Stop is part of the Cmd interface. +func (cmd *cmdWrapper) Stop() { + c := (*osexec.Cmd)(cmd) + if c.ProcessState.Exited() { + return + } + c.Process.Signal(syscall.SIGTERM) + time.AfterFunc(10*time.Second, func() { + if c.ProcessState.Exited() { + return + } + c.Process.Signal(syscall.SIGKILL) + }) +} + +func handleError(err error) error { + if ee, ok := err.(*osexec.ExitError); ok { + // Force a compile fail if exitErrorWrapper can't convert to ExitError. + var x ExitError = &ExitErrorWrapper{ee} + return x + } + if ee, ok := err.(*osexec.Error); ok { + if ee.Err == osexec.ErrNotFound { + return ErrExecutableNotFound + } + } + return err +} + +// ExitErrorWrapper is an implementation of ExitError in terms of os/exec ExitError. +// Note: standard exec.ExitError is type *os.ProcessState, which already implements Exited(). +type ExitErrorWrapper struct { + *osexec.ExitError +} + +var _ ExitError = ExitErrorWrapper{} + +// ExitStatus is part of the ExitError interface. +func (eew ExitErrorWrapper) ExitStatus() int { + ws, ok := eew.Sys().(syscall.WaitStatus) + if !ok { + panic("can't call ExitStatus() on a non-WaitStatus exitErrorWrapper") + } + return ws.ExitStatus() +} + +// CodeExitError is an implementation of ExitError consisting of an error object +// and an exit code (the upper bits of os.exec.ExitStatus). +type CodeExitError struct { + Err error + Code int +} + +var _ ExitError = CodeExitError{} + +func (e CodeExitError) Error() string { + return e.Err.Error() +} + +func (e CodeExitError) String() string { + return e.Err.Error() +} + +func (e CodeExitError) Exited() bool { + return true +} + +func (e CodeExitError) ExitStatus() int { + return e.Code +} diff --git a/pkg/client/unversioned/remotecommand/BUILD b/staging/src/k8s.io/client-go/tools/remotecommand/BUILD similarity index 79% rename from pkg/client/unversioned/remotecommand/BUILD rename to staging/src/k8s.io/client-go/tools/remotecommand/BUILD index 4dbb05d47c7..67f17532d06 100644 --- a/pkg/client/unversioned/remotecommand/BUILD +++ b/staging/src/k8s.io/client-go/tools/remotecommand/BUILD @@ -8,6 +8,21 @@ load( "go_test", ) +go_test( + name = "go_default_test", + srcs = [ + "v2_test.go", + "v4_test.go", + ], + library = ":go_default_library", + tags = ["automanaged"], + deps = [ + "//vendor/k8s.io/apimachinery/pkg/util/httpstream:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//vendor/k8s.io/client-go/pkg/api:go_default_library", + ], +) + go_library( name = "go_default_library", srcs = [ @@ -22,43 +37,15 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", - "//pkg/util/exec:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/httpstream:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/remotecommand:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + "//vendor/k8s.io/client-go/pkg/api:go_default_library", + "//vendor/k8s.io/client-go/pkg/util/exec:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/transport:go_default_library", ], ) - -go_test( - name = "go_default_test", - srcs = [ - "v2_test.go", - "v4_test.go", - ], - library = ":go_default_library", - tags = ["automanaged"], - deps = [ - "//pkg/api:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/util/httpstream:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/util/wait: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/remotecommand/doc.go b/staging/src/k8s.io/client-go/tools/remotecommand/doc.go similarity index 89% rename from pkg/client/unversioned/remotecommand/doc.go rename to staging/src/k8s.io/client-go/tools/remotecommand/doc.go index 85a91f2339f..ac06a9cd376 100644 --- a/pkg/client/unversioned/remotecommand/doc.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/doc.go @@ -17,4 +17,4 @@ limitations under the License. // Package remotecommand adds support for executing commands in containers, // with support for separate stdin, stdout, and stderr streams, as well as // TTY. -package remotecommand // import "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" +package remotecommand // import "k8s.io/client-go/tools/remotecommand" diff --git a/pkg/client/unversioned/remotecommand/errorstream.go b/staging/src/k8s.io/client-go/tools/remotecommand/errorstream.go similarity index 100% rename from pkg/client/unversioned/remotecommand/errorstream.go rename to staging/src/k8s.io/client-go/tools/remotecommand/errorstream.go diff --git a/pkg/client/unversioned/remotecommand/remotecommand.go b/staging/src/k8s.io/client-go/tools/remotecommand/remotecommand.go similarity index 100% rename from pkg/client/unversioned/remotecommand/remotecommand.go rename to staging/src/k8s.io/client-go/tools/remotecommand/remotecommand.go diff --git a/pkg/client/unversioned/remotecommand/resize.go b/staging/src/k8s.io/client-go/tools/remotecommand/resize.go similarity index 100% rename from pkg/client/unversioned/remotecommand/resize.go rename to staging/src/k8s.io/client-go/tools/remotecommand/resize.go diff --git a/pkg/client/unversioned/remotecommand/v1.go b/staging/src/k8s.io/client-go/tools/remotecommand/v1.go similarity index 99% rename from pkg/client/unversioned/remotecommand/v1.go rename to staging/src/k8s.io/client-go/tools/remotecommand/v1.go index a62c1c23da6..368fd46b29b 100644 --- a/pkg/client/unversioned/remotecommand/v1.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v1.go @@ -24,7 +24,7 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/util/httpstream" - "k8s.io/kubernetes/pkg/api" + "k8s.io/client-go/pkg/api" ) // streamProtocolV1 implements the first version of the streaming exec & attach diff --git a/pkg/client/unversioned/remotecommand/v2.go b/staging/src/k8s.io/client-go/tools/remotecommand/v2.go similarity index 99% rename from pkg/client/unversioned/remotecommand/v2.go rename to staging/src/k8s.io/client-go/tools/remotecommand/v2.go index 0e5de492945..1bc4c2ebe80 100644 --- a/pkg/client/unversioned/remotecommand/v2.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v2.go @@ -24,7 +24,7 @@ import ( "sync" "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kubernetes/pkg/api" + "k8s.io/client-go/pkg/api" ) // streamProtocolV2 implements version 2 of the streaming protocol for attach diff --git a/pkg/client/unversioned/remotecommand/v2_test.go b/staging/src/k8s.io/client-go/tools/remotecommand/v2_test.go similarity index 99% rename from pkg/client/unversioned/remotecommand/v2_test.go rename to staging/src/k8s.io/client-go/tools/remotecommand/v2_test.go index 6e7c05927ec..f1f80c917cf 100644 --- a/pkg/client/unversioned/remotecommand/v2_test.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v2_test.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/kubernetes/pkg/api" + "k8s.io/client-go/pkg/api" ) type fakeReader struct { diff --git a/pkg/client/unversioned/remotecommand/v3.go b/staging/src/k8s.io/client-go/tools/remotecommand/v3.go similarity index 98% rename from pkg/client/unversioned/remotecommand/v3.go rename to staging/src/k8s.io/client-go/tools/remotecommand/v3.go index 923e8c4e605..72f443799c2 100644 --- a/pkg/client/unversioned/remotecommand/v3.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v3.go @@ -23,7 +23,7 @@ import ( "sync" "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kubernetes/pkg/api" + "k8s.io/client-go/pkg/api" ) // streamProtocolV3 implements version 3 of the streaming protocol for attach diff --git a/pkg/client/unversioned/remotecommand/v4.go b/staging/src/k8s.io/client-go/tools/remotecommand/v4.go similarity index 98% rename from pkg/client/unversioned/remotecommand/v4.go rename to staging/src/k8s.io/client-go/tools/remotecommand/v4.go index 92d240c8166..6fb2abb18d3 100644 --- a/pkg/client/unversioned/remotecommand/v4.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v4.go @@ -25,7 +25,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/remotecommand" - "k8s.io/kubernetes/pkg/util/exec" + "k8s.io/client-go/pkg/util/exec" ) // streamProtocolV4 implements version 4 of the streaming protocol for attach diff --git a/pkg/client/unversioned/remotecommand/v4_test.go b/staging/src/k8s.io/client-go/tools/remotecommand/v4_test.go similarity index 100% rename from pkg/client/unversioned/remotecommand/v4_test.go rename to staging/src/k8s.io/client-go/tools/remotecommand/v4_test.go diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index 8172a324f2d..530287e91ab 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -60,7 +60,6 @@ go_library( "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/conditions:go_default_library", "//pkg/client/retry:go_default_library", - "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider/providers/aws:go_default_library", "//pkg/cloudprovider/providers/azure:go_default_library", @@ -131,6 +130,7 @@ go_library( "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library", + "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", ], ) diff --git a/test/e2e/framework/exec_util.go b/test/e2e/framework/exec_util.go index ad407b8130b..03fe7b8dc02 100644 --- a/test/e2e/framework/exec_util.go +++ b/test/e2e/framework/exec_util.go @@ -25,9 +25,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" remocommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" . "github.com/onsi/gomega" ) diff --git a/test/test_owners.csv b/test/test_owners.csv index 898f19267e0..f688b6ad513 100644 --- a/test/test_owners.csv +++ b/test/test_owners.csv @@ -655,7 +655,6 @@ k8s.io/kubernetes/pkg/client/listers/extensions/v1beta1,jszczepkowski,1, k8s.io/kubernetes/pkg/client/retry,caesarxuchao,1, k8s.io/kubernetes/pkg/client/tests,Q-Lee,1, k8s.io/kubernetes/pkg/client/unversioned,justinsb,1, -k8s.io/kubernetes/pkg/client/unversioned/remotecommand,rrati,0, k8s.io/kubernetes/pkg/cloudprovider/providers/aws,eparis,1, k8s.io/kubernetes/pkg/cloudprovider/providers/azure,saad-ali,1, k8s.io/kubernetes/pkg/cloudprovider/providers/cloudstack,roberthbailey,1, From 8574bc564f4c54aa964d6c0c7ccec3202d9e2f1b Mon Sep 17 00:00:00 2001 From: Dmitry Shulyak Date: Mon, 8 May 2017 12:37:41 +0300 Subject: [PATCH 2/5] Add exec module to client-go/util only with required code client-go/pkt/util was removed in favor of client-go util, which consists only from CodeExitError and ExitError interface --- .../src/k8s.io/client-go/Godeps/Godeps.json | 22 +- .../k8s.io/client-go/pkg/util/exec/exec.go | 188 ------------------ .../client-go/tools/remotecommand/BUILD | 2 +- .../client-go/tools/remotecommand/v4.go | 2 +- .../client-go/{pkg => }/util/exec/BUILD | 0 .../src/k8s.io/client-go/util/exec/exec.go | 52 +++++ 6 files changed, 75 insertions(+), 191 deletions(-) delete mode 100644 staging/src/k8s.io/client-go/pkg/util/exec/exec.go rename staging/src/k8s.io/client-go/{pkg => }/util/exec/BUILD (100%) create mode 100644 staging/src/k8s.io/client-go/util/exec/exec.go diff --git a/staging/src/k8s.io/client-go/Godeps/Godeps.json b/staging/src/k8s.io/client-go/Godeps/Godeps.json index 49dd81a79f7..f6a9018137b 100644 --- a/staging/src/k8s.io/client-go/Godeps/Godeps.json +++ b/staging/src/k8s.io/client-go/Godeps/Godeps.json @@ -1,6 +1,6 @@ { "ImportPath": "k8s.io/client-go", - "GoVersion": "go1.8", + "GoVersion": "go1.7", "GodepVersion": "v79", "Packages": [ "./..." @@ -66,6 +66,14 @@ "ImportPath": "github.com/docker/distribution/reference", "Rev": "cd27f179f2c10c5d300e6d09025b538c475b0d51" }, + { + "ImportPath": "github.com/docker/spdystream", + "Rev": "449fdfce4d962303d702fec724ef0ad181c92528" + }, + { + "ImportPath": "github.com/docker/spdystream/spdy", + "Rev": "449fdfce4d962303d702fec724ef0ad181c92528" + }, { "ImportPath": "github.com/emicklei/go-restful", "Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46" @@ -390,6 +398,10 @@ "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, { "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" @@ -410,6 +422,10 @@ "ImportPath": "k8s.io/apimachinery/pkg/util/rand", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" @@ -450,6 +466,10 @@ "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, + { + "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" diff --git a/staging/src/k8s.io/client-go/pkg/util/exec/exec.go b/staging/src/k8s.io/client-go/pkg/util/exec/exec.go deleted file mode 100644 index 327ddf5bce0..00000000000 --- a/staging/src/k8s.io/client-go/pkg/util/exec/exec.go +++ /dev/null @@ -1,188 +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 exec - -import ( - "io" - osexec "os/exec" - "syscall" - "time" -) - -// ErrExecutableNotFound is returned if the executable is not found. -var ErrExecutableNotFound = osexec.ErrNotFound - -// Interface is an interface that presents a subset of the os/exec API. Use this -// when you want to inject fakeable/mockable exec behavior. -type Interface interface { - // Command returns a Cmd instance which can be used to run a single command. - // This follows the pattern of package os/exec. - Command(cmd string, args ...string) Cmd - - // LookPath wraps os/exec.LookPath - LookPath(file string) (string, error) -} - -// Cmd is an interface that presents an API that is very similar to Cmd from os/exec. -// As more functionality is needed, this can grow. Since Cmd is a struct, we will have -// to replace fields with get/set method pairs. -type Cmd interface { - // CombinedOutput runs the command and returns its combined standard output - // and standard error. This follows the pattern of package os/exec. - CombinedOutput() ([]byte, error) - // Output runs the command and returns standard output, but not standard err - Output() ([]byte, error) - SetDir(dir string) - SetStdin(in io.Reader) - SetStdout(out io.Writer) - // Stops the command by sending SIGTERM. It is not guaranteed the - // process will stop before this function returns. If the process is not - // responding, an internal timer function will send a SIGKILL to force - // terminate after 10 seconds. - Stop() -} - -// ExitError is an interface that presents an API similar to os.ProcessState, which is -// what ExitError from os/exec is. This is designed to make testing a bit easier and -// probably loses some of the cross-platform properties of the underlying library. -type ExitError interface { - String() string - Error() string - Exited() bool - ExitStatus() int -} - -// Implements Interface in terms of really exec()ing. -type executor struct{} - -// New returns a new Interface which will os/exec to run commands. -func New() Interface { - return &executor{} -} - -// Command is part of the Interface interface. -func (executor *executor) Command(cmd string, args ...string) Cmd { - return (*cmdWrapper)(osexec.Command(cmd, args...)) -} - -// LookPath is part of the Interface interface -func (executor *executor) LookPath(file string) (string, error) { - return osexec.LookPath(file) -} - -// Wraps exec.Cmd so we can capture errors. -type cmdWrapper osexec.Cmd - -func (cmd *cmdWrapper) SetDir(dir string) { - cmd.Dir = dir -} - -func (cmd *cmdWrapper) SetStdin(in io.Reader) { - cmd.Stdin = in -} - -func (cmd *cmdWrapper) SetStdout(out io.Writer) { - cmd.Stdout = out -} - -// CombinedOutput is part of the Cmd interface. -func (cmd *cmdWrapper) CombinedOutput() ([]byte, error) { - out, err := (*osexec.Cmd)(cmd).CombinedOutput() - if err != nil { - return out, handleError(err) - } - return out, nil -} - -func (cmd *cmdWrapper) Output() ([]byte, error) { - out, err := (*osexec.Cmd)(cmd).Output() - if err != nil { - return out, handleError(err) - } - return out, nil -} - -// Stop is part of the Cmd interface. -func (cmd *cmdWrapper) Stop() { - c := (*osexec.Cmd)(cmd) - if c.ProcessState.Exited() { - return - } - c.Process.Signal(syscall.SIGTERM) - time.AfterFunc(10*time.Second, func() { - if c.ProcessState.Exited() { - return - } - c.Process.Signal(syscall.SIGKILL) - }) -} - -func handleError(err error) error { - if ee, ok := err.(*osexec.ExitError); ok { - // Force a compile fail if exitErrorWrapper can't convert to ExitError. - var x ExitError = &ExitErrorWrapper{ee} - return x - } - if ee, ok := err.(*osexec.Error); ok { - if ee.Err == osexec.ErrNotFound { - return ErrExecutableNotFound - } - } - return err -} - -// ExitErrorWrapper is an implementation of ExitError in terms of os/exec ExitError. -// Note: standard exec.ExitError is type *os.ProcessState, which already implements Exited(). -type ExitErrorWrapper struct { - *osexec.ExitError -} - -var _ ExitError = ExitErrorWrapper{} - -// ExitStatus is part of the ExitError interface. -func (eew ExitErrorWrapper) ExitStatus() int { - ws, ok := eew.Sys().(syscall.WaitStatus) - if !ok { - panic("can't call ExitStatus() on a non-WaitStatus exitErrorWrapper") - } - return ws.ExitStatus() -} - -// CodeExitError is an implementation of ExitError consisting of an error object -// and an exit code (the upper bits of os.exec.ExitStatus). -type CodeExitError struct { - Err error - Code int -} - -var _ ExitError = CodeExitError{} - -func (e CodeExitError) Error() string { - return e.Err.Error() -} - -func (e CodeExitError) String() string { - return e.Err.Error() -} - -func (e CodeExitError) Exited() bool { - return true -} - -func (e CodeExitError) ExitStatus() int { - return e.Code -} diff --git a/staging/src/k8s.io/client-go/tools/remotecommand/BUILD b/staging/src/k8s.io/client-go/tools/remotecommand/BUILD index 67f17532d06..8c8ce27cd65 100644 --- a/staging/src/k8s.io/client-go/tools/remotecommand/BUILD +++ b/staging/src/k8s.io/client-go/tools/remotecommand/BUILD @@ -44,8 +44,8 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/remotecommand:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/client-go/pkg/api:go_default_library", - "//vendor/k8s.io/client-go/pkg/util/exec:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/transport:go_default_library", + "//vendor/k8s.io/client-go/util/exec:go_default_library", ], ) diff --git a/staging/src/k8s.io/client-go/tools/remotecommand/v4.go b/staging/src/k8s.io/client-go/tools/remotecommand/v4.go index 6fb2abb18d3..69ca934a0d7 100644 --- a/staging/src/k8s.io/client-go/tools/remotecommand/v4.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v4.go @@ -25,7 +25,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/remotecommand" - "k8s.io/client-go/pkg/util/exec" + "k8s.io/client-go/util/exec" ) // streamProtocolV4 implements version 4 of the streaming protocol for attach diff --git a/staging/src/k8s.io/client-go/pkg/util/exec/BUILD b/staging/src/k8s.io/client-go/util/exec/BUILD similarity index 100% rename from staging/src/k8s.io/client-go/pkg/util/exec/BUILD rename to staging/src/k8s.io/client-go/util/exec/BUILD diff --git a/staging/src/k8s.io/client-go/util/exec/exec.go b/staging/src/k8s.io/client-go/util/exec/exec.go new file mode 100644 index 00000000000..d170badb60a --- /dev/null +++ b/staging/src/k8s.io/client-go/util/exec/exec.go @@ -0,0 +1,52 @@ +/* +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 exec + +// ExitError is an interface that presents an API similar to os.ProcessState, which is +// what ExitError from os/exec is. This is designed to make testing a bit easier and +// probably loses some of the cross-platform properties of the underlying library. +type ExitError interface { + String() string + Error() string + Exited() bool + ExitStatus() int +} + +// CodeExitError is an implementation of ExitError consisting of an error object +// and an exit code (the upper bits of os.exec.ExitStatus). +type CodeExitError struct { + Err error + Code int +} + +var _ ExitError = CodeExitError{} + +func (e CodeExitError) Error() string { + return e.Err.Error() +} + +func (e CodeExitError) String() string { + return e.Err.Error() +} + +func (e CodeExitError) Exited() bool { + return true +} + +func (e CodeExitError) ExitStatus() int { + return e.Code +} From c0a3e9ad130c77919076530de18f94e31e1c1836 Mon Sep 17 00:00:00 2001 From: Dmitry Shulyak Date: Mon, 8 May 2017 14:57:58 +0300 Subject: [PATCH 3/5] Fix golint and godeps verification --- hack/.linted_packages | 1 + pkg/util/term/resizeevents_windows.go | 2 +- pkg/util/term/setsize_unsupported.go | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/hack/.linted_packages b/hack/.linted_packages index fc3af381af9..d84e44abeb0 100644 --- a/hack/.linted_packages +++ b/hack/.linted_packages @@ -385,6 +385,7 @@ staging/src/k8s.io/client-go/plugin/pkg/client/auth/gcp staging/src/k8s.io/client-go/rest/watch staging/src/k8s.io/client-go/tools/auth staging/src/k8s.io/client-go/tools/metrics +staging/src/k8s.io/client-go/tools/remotecommand staging/src/k8s.io/client-go/util/cert staging/src/k8s.io/client-go/util/homedir staging/src/k8s.io/client-go/util/workqueue diff --git a/pkg/util/term/resizeevents_windows.go b/pkg/util/term/resizeevents_windows.go index e38e0e0caf8..adccf873466 100644 --- a/pkg/util/term/resizeevents_windows.go +++ b/pkg/util/term/resizeevents_windows.go @@ -20,7 +20,7 @@ import ( "time" "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" ) // monitorResizeEvents spawns a goroutine that periodically gets the terminal size and tries to send diff --git a/pkg/util/term/setsize_unsupported.go b/pkg/util/term/setsize_unsupported.go index 6d6390d5680..82220217a67 100644 --- a/pkg/util/term/setsize_unsupported.go +++ b/pkg/util/term/setsize_unsupported.go @@ -19,7 +19,7 @@ limitations under the License. package term import ( - "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" + "k8s.io/client-go/tools/remotecommand" ) func SetSize(fd uintptr, size remotecommand.TerminalSize) error { From 64d98c2d92ca18e966a7b7cdabfec4f2c594fb6f Mon Sep 17 00:00:00 2001 From: Dmitry Shulyak Date: Mon, 8 May 2017 15:14:52 +0300 Subject: [PATCH 4/5] Add remotecommand to client-go/pkg/api visibility rules --- staging/src/k8s.io/client-go/pkg/api/BUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/staging/src/k8s.io/client-go/pkg/api/BUILD b/staging/src/k8s.io/client-go/pkg/api/BUILD index e6c086b3208..b0ea34c0c57 100644 --- a/staging/src/k8s.io/client-go/pkg/api/BUILD +++ b/staging/src/k8s.io/client-go/pkg/api/BUILD @@ -26,6 +26,7 @@ go_library( visibility = [ "//vendor/k8s.io/client-go/pkg/api:__subpackages__", "//vendor/k8s.io/client-go/pkg/apis:__subpackages__", + "//vendor/k8s.io/client-go/tools/remotecommand:__subpackages__", "//vendor/k8s.io/kube-apiextensions-server/pkg/apis/apiextensions/install:__subpackages__", "//vendor/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake:__subpackages__", ], From a713604b24bfb4530b690e061e863e71e0bc1087 Mon Sep 17 00:00:00 2001 From: Dmitry Shulyak Date: Wed, 10 May 2017 10:39:20 +0300 Subject: [PATCH 5/5] Use streaming constants from pkg/api/v1 instead of pkg/api --- pkg/kubelet/container/BUILD | 2 +- pkg/kubelet/container/runtime.go | 2 +- pkg/kubelet/dockershim/BUILD | 4 ++-- pkg/kubelet/dockershim/docker_streaming.go | 2 +- pkg/kubelet/server/streaming/BUILD | 4 ++-- pkg/kubelet/server/streaming/server.go | 2 +- pkg/kubelet/server/streaming/server_test.go | 2 +- staging/src/k8s.io/client-go/pkg/api/BUILD | 1 - .../client-go/tools/remotecommand/BUILD | 4 ++-- .../client-go/tools/remotecommand/v1.go | 18 +++++++-------- .../client-go/tools/remotecommand/v2.go | 10 ++++----- .../client-go/tools/remotecommand/v2_test.go | 22 +++++++++---------- .../client-go/tools/remotecommand/v3.go | 4 ++-- 13 files changed, 38 insertions(+), 39 deletions(-) diff --git a/pkg/kubelet/container/BUILD b/pkg/kubelet/container/BUILD index 6ce5b4a47d4..6bf45b81854 100644 --- a/pkg/kubelet/container/BUILD +++ b/pkg/kubelet/container/BUILD @@ -29,7 +29,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/api/v1/ref:go_default_library", - "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", + "//pkg/kubelet/apis/cri/v1alpha1:go_default_library", "//pkg/kubelet/events:go_default_library", "//pkg/kubelet/util/format:go_default_library", "//pkg/kubelet/util/ioutils:go_default_library", diff --git a/pkg/kubelet/container/runtime.go b/pkg/kubelet/container/runtime.go index 9a45ab75a35..2837e59bba0 100644 --- a/pkg/kubelet/container/runtime.go +++ b/pkg/kubelet/container/runtime.go @@ -29,7 +29,7 @@ import ( "k8s.io/client-go/tools/remotecommand" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" "k8s.io/kubernetes/pkg/volume" ) diff --git a/pkg/kubelet/dockershim/BUILD b/pkg/kubelet/dockershim/BUILD index de1582825ec..e182836e77c 100644 --- a/pkg/kubelet/dockershim/BUILD +++ b/pkg/kubelet/dockershim/BUILD @@ -32,8 +32,8 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/api/v1/helper:go_default_library", "//pkg/apis/componentconfig:go_default_library", - "//pkg/kubelet/api:go_default_library", - "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", + "//pkg/kubelet/apis/cri:go_default_library", + "//pkg/kubelet/apis/cri/v1alpha1:go_default_library", "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/dockershim/cm:go_default_library", diff --git a/pkg/kubelet/dockershim/docker_streaming.go b/pkg/kubelet/dockershim/docker_streaming.go index cfec6ef0e89..d4af0b58cb5 100644 --- a/pkg/kubelet/dockershim/docker_streaming.go +++ b/pkg/kubelet/dockershim/docker_streaming.go @@ -30,7 +30,7 @@ import ( "github.com/golang/glog" "k8s.io/client-go/tools/remotecommand" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/server/streaming" "k8s.io/kubernetes/pkg/kubelet/util/ioutils" diff --git a/pkg/kubelet/server/streaming/BUILD b/pkg/kubelet/server/streaming/BUILD index 6982ff1830a..6fc7056b3e2 100644 --- a/pkg/kubelet/server/streaming/BUILD +++ b/pkg/kubelet/server/streaming/BUILD @@ -17,7 +17,7 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", + "//pkg/kubelet/apis/cri/v1alpha1:go_default_library", "//pkg/kubelet/server/portforward:go_default_library", "//pkg/kubelet/server/remotecommand:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", @@ -40,7 +40,7 @@ go_test( tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", - "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", + "//pkg/kubelet/apis/cri/v1alpha1:go_default_library", "//pkg/kubelet/server/portforward:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/require:go_default_library", diff --git a/pkg/kubelet/server/streaming/server.go b/pkg/kubelet/server/streaming/server.go index 7291860fbe1..3650fdeebac 100644 --- a/pkg/kubelet/server/streaming/server.go +++ b/pkg/kubelet/server/streaming/server.go @@ -33,7 +33,7 @@ import ( "k8s.io/apimachinery/pkg/types" remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" "k8s.io/client-go/tools/remotecommand" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" "k8s.io/kubernetes/pkg/kubelet/server/portforward" remotecommandserver "k8s.io/kubernetes/pkg/kubelet/server/remotecommand" ) diff --git a/pkg/kubelet/server/streaming/server_test.go b/pkg/kubelet/server/streaming/server_test.go index e7a89ff4575..ca569137c2d 100644 --- a/pkg/kubelet/server/streaming/server_test.go +++ b/pkg/kubelet/server/streaming/server_test.go @@ -34,7 +34,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/remotecommand" "k8s.io/kubernetes/pkg/api" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" + runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" kubeletportforward "k8s.io/kubernetes/pkg/kubelet/server/portforward" ) diff --git a/staging/src/k8s.io/client-go/pkg/api/BUILD b/staging/src/k8s.io/client-go/pkg/api/BUILD index b0ea34c0c57..e6c086b3208 100644 --- a/staging/src/k8s.io/client-go/pkg/api/BUILD +++ b/staging/src/k8s.io/client-go/pkg/api/BUILD @@ -26,7 +26,6 @@ go_library( visibility = [ "//vendor/k8s.io/client-go/pkg/api:__subpackages__", "//vendor/k8s.io/client-go/pkg/apis:__subpackages__", - "//vendor/k8s.io/client-go/tools/remotecommand:__subpackages__", "//vendor/k8s.io/kube-apiextensions-server/pkg/apis/apiextensions/install:__subpackages__", "//vendor/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake:__subpackages__", ], diff --git a/staging/src/k8s.io/client-go/tools/remotecommand/BUILD b/staging/src/k8s.io/client-go/tools/remotecommand/BUILD index 8c8ce27cd65..6845abe049f 100644 --- a/staging/src/k8s.io/client-go/tools/remotecommand/BUILD +++ b/staging/src/k8s.io/client-go/tools/remotecommand/BUILD @@ -19,7 +19,7 @@ go_test( deps = [ "//vendor/k8s.io/apimachinery/pkg/util/httpstream:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//vendor/k8s.io/client-go/pkg/api:go_default_library", + "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", ], ) @@ -43,7 +43,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/remotecommand:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", - "//vendor/k8s.io/client-go/pkg/api:go_default_library", + "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/transport:go_default_library", "//vendor/k8s.io/client-go/util/exec:go_default_library", diff --git a/staging/src/k8s.io/client-go/tools/remotecommand/v1.go b/staging/src/k8s.io/client-go/tools/remotecommand/v1.go index 368fd46b29b..1db917c0b78 100644 --- a/staging/src/k8s.io/client-go/tools/remotecommand/v1.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v1.go @@ -24,7 +24,7 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/util/httpstream" - "k8s.io/client-go/pkg/api" + "k8s.io/client-go/pkg/api/v1" ) // streamProtocolV1 implements the first version of the streaming exec & attach @@ -58,7 +58,7 @@ func (p *streamProtocolV1) stream(conn streamCreator) error { if _, err := io.Copy(dst, src); err != nil && err != io.EOF { glog.Errorf("Error copying %s: %v", s, err) } - if s == api.StreamTypeStdout || s == api.StreamTypeStderr { + if s == v1.StreamTypeStdout || s == v1.StreamTypeStderr { doneChan <- struct{}{} } } @@ -66,7 +66,7 @@ func (p *streamProtocolV1) stream(conn streamCreator) error { // set up all the streams first var err error headers := http.Header{} - headers.Set(api.StreamType, api.StreamTypeError) + headers.Set(v1.StreamType, v1.StreamTypeError) p.errorStream, err = conn.CreateStream(headers) if err != nil { return err @@ -81,7 +81,7 @@ func (p *streamProtocolV1) stream(conn streamCreator) error { // gets all the streams. By creating all the streams first, we ensure that the server is ready to // process data before the client starts sending any. See https://issues.k8s.io/16373 for more info. if p.Stdin != nil { - headers.Set(api.StreamType, api.StreamTypeStdin) + headers.Set(v1.StreamType, v1.StreamTypeStdin) p.remoteStdin, err = conn.CreateStream(headers) if err != nil { return err @@ -90,7 +90,7 @@ func (p *streamProtocolV1) stream(conn streamCreator) error { } if p.Stdout != nil { - headers.Set(api.StreamType, api.StreamTypeStdout) + headers.Set(v1.StreamType, v1.StreamTypeStdout) p.remoteStdout, err = conn.CreateStream(headers) if err != nil { return err @@ -99,7 +99,7 @@ func (p *streamProtocolV1) stream(conn streamCreator) error { } if p.Stderr != nil && !p.Tty { - headers.Set(api.StreamType, api.StreamTypeStderr) + headers.Set(v1.StreamType, v1.StreamTypeStderr) p.remoteStderr, err = conn.CreateStream(headers) if err != nil { return err @@ -127,7 +127,7 @@ func (p *streamProtocolV1) stream(conn streamCreator) error { // because stdin is not closed until the process exits. If we try to call // stdin.Close(), it returns no error but doesn't unblock the copy. It will // exit when the process exits, instead. - go cp(api.StreamTypeStdin, p.remoteStdin, p.Stdin) + go cp(v1.StreamTypeStdin, p.remoteStdin, p.Stdin) } waitCount := 0 @@ -135,12 +135,12 @@ func (p *streamProtocolV1) stream(conn streamCreator) error { if p.Stdout != nil { waitCount++ - go cp(api.StreamTypeStdout, p.Stdout, p.remoteStdout) + go cp(v1.StreamTypeStdout, p.Stdout, p.remoteStdout) } if p.Stderr != nil && !p.Tty { waitCount++ - go cp(api.StreamTypeStderr, p.Stderr, p.remoteStderr) + go cp(v1.StreamTypeStderr, p.Stderr, p.remoteStderr) } Loop: diff --git a/staging/src/k8s.io/client-go/tools/remotecommand/v2.go b/staging/src/k8s.io/client-go/tools/remotecommand/v2.go index 1bc4c2ebe80..95346a4399b 100644 --- a/staging/src/k8s.io/client-go/tools/remotecommand/v2.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v2.go @@ -24,7 +24,7 @@ import ( "sync" "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/client-go/pkg/api" + "k8s.io/client-go/pkg/api/v1" ) // streamProtocolV2 implements version 2 of the streaming protocol for attach @@ -53,7 +53,7 @@ func (p *streamProtocolV2) createStreams(conn streamCreator) error { headers := http.Header{} // set up error stream - headers.Set(api.StreamType, api.StreamTypeError) + headers.Set(v1.StreamType, v1.StreamTypeError) p.errorStream, err = conn.CreateStream(headers) if err != nil { return err @@ -61,7 +61,7 @@ func (p *streamProtocolV2) createStreams(conn streamCreator) error { // set up stdin stream if p.Stdin != nil { - headers.Set(api.StreamType, api.StreamTypeStdin) + headers.Set(v1.StreamType, v1.StreamTypeStdin) p.remoteStdin, err = conn.CreateStream(headers) if err != nil { return err @@ -70,7 +70,7 @@ func (p *streamProtocolV2) createStreams(conn streamCreator) error { // set up stdout stream if p.Stdout != nil { - headers.Set(api.StreamType, api.StreamTypeStdout) + headers.Set(v1.StreamType, v1.StreamTypeStdout) p.remoteStdout, err = conn.CreateStream(headers) if err != nil { return err @@ -79,7 +79,7 @@ func (p *streamProtocolV2) createStreams(conn streamCreator) error { // set up stderr stream if p.Stderr != nil && !p.Tty { - headers.Set(api.StreamType, api.StreamTypeStderr) + headers.Set(v1.StreamType, v1.StreamTypeStderr) p.remoteStderr, err = conn.CreateStream(headers) if err != nil { return err diff --git a/staging/src/k8s.io/client-go/tools/remotecommand/v2_test.go b/staging/src/k8s.io/client-go/tools/remotecommand/v2_test.go index f1f80c917cf..adebfaed8d8 100644 --- a/staging/src/k8s.io/client-go/tools/remotecommand/v2_test.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v2_test.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/pkg/api" + "k8s.io/client-go/pkg/api/v1" ) type fakeReader struct { @@ -47,7 +47,7 @@ type fakeStreamCreator struct { var _ streamCreator = &fakeStreamCreator{} func (f *fakeStreamCreator) CreateStream(headers http.Header) (httpstream.Stream, error) { - streamType := headers.Get(api.StreamType) + streamType := headers.Get(v1.StreamType) f.created[streamType] = true return nil, f.errors[streamType] } @@ -111,10 +111,10 @@ func TestV2CreateStreams(t *testing.T) { conn := &fakeStreamCreator{ created: make(map[string]bool), errors: map[string]error{ - api.StreamTypeStdin: test.stdinError, - api.StreamTypeStdout: test.stdoutError, - api.StreamTypeStderr: test.stderrError, - api.StreamTypeError: test.errorError, + v1.StreamTypeStdin: test.stdinError, + v1.StreamTypeStdout: test.stdoutError, + v1.StreamTypeStderr: test.stderrError, + v1.StreamTypeError: test.errorError, }, } @@ -157,20 +157,20 @@ func TestV2CreateStreams(t *testing.T) { continue } - if test.stdin && !conn.created[api.StreamTypeStdin] { + if test.stdin && !conn.created[v1.StreamTypeStdin] { t.Errorf("%s: expected stdin stream", test.name) } - if test.stdout && !conn.created[api.StreamTypeStdout] { + if test.stdout && !conn.created[v1.StreamTypeStdout] { t.Errorf("%s: expected stdout stream", test.name) } if test.stderr { - if test.tty && conn.created[api.StreamTypeStderr] { + if test.tty && conn.created[v1.StreamTypeStderr] { t.Errorf("%s: unexpected stderr stream because tty is set", test.name) - } else if !test.tty && !conn.created[api.StreamTypeStderr] { + } else if !test.tty && !conn.created[v1.StreamTypeStderr] { t.Errorf("%s: expected stderr stream", test.name) } } - if !conn.created[api.StreamTypeError] { + if !conn.created[v1.StreamTypeError] { t.Errorf("%s: expected error stream", test.name) } diff --git a/staging/src/k8s.io/client-go/tools/remotecommand/v3.go b/staging/src/k8s.io/client-go/tools/remotecommand/v3.go index 72f443799c2..03b9e2a683e 100644 --- a/staging/src/k8s.io/client-go/tools/remotecommand/v3.go +++ b/staging/src/k8s.io/client-go/tools/remotecommand/v3.go @@ -23,7 +23,7 @@ import ( "sync" "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/client-go/pkg/api" + "k8s.io/client-go/pkg/api/v1" ) // streamProtocolV3 implements version 3 of the streaming protocol for attach @@ -51,7 +51,7 @@ func (p *streamProtocolV3) createStreams(conn streamCreator) error { // set up resize stream if p.Tty { headers := http.Header{} - headers.Set(api.StreamType, api.StreamTypeResize) + headers.Set(v1.StreamType, v1.StreamTypeResize) var err error p.resizeStream, err = conn.CreateStream(headers) if err != nil {