diff --git a/cmd/kubemark/app/hollow_node.go b/cmd/kubemark/app/hollow_node.go index 9a545767f5a..fe7888489f6 100644 --- a/cmd/kubemark/app/hollow_node.go +++ b/cmd/kubemark/app/hollow_node.go @@ -41,13 +41,13 @@ import ( _ "k8s.io/component-base/metrics/prometheus/version" // for version metric registration "k8s.io/component-base/version" "k8s.io/component-base/version/verflag" + remote "k8s.io/cri-client/pkg" + fakeremote "k8s.io/cri-client/pkg/fake" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/cluster/ports" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" "k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap" "k8s.io/kubernetes/pkg/kubelet/cm" - "k8s.io/kubernetes/pkg/kubelet/cri/remote" - fakeremote "k8s.io/kubernetes/pkg/kubelet/cri/remote/fake" "k8s.io/kubernetes/pkg/kubemark" kubemarkproxy "k8s.io/kubernetes/pkg/proxy/kubemark" utilflag "k8s.io/kubernetes/pkg/util/flag" diff --git a/go.mod b/go.mod index 6e8fb0f7f82..d2b5ee24576 100644 --- a/go.mod +++ b/go.mod @@ -64,7 +64,6 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.13 go.etcd.io/etcd/client/v3 v3.5.13 go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful v0.42.0 - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 go.opentelemetry.io/otel v1.20.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 go.opentelemetry.io/otel/sdk v1.20.0 @@ -100,6 +99,7 @@ require ( k8s.io/component-helpers v0.0.0 k8s.io/controller-manager v0.0.0 k8s.io/cri-api v0.0.0 + k8s.io/cri-client v0.0.0 k8s.io/csi-translation-lib v0.0.0 k8s.io/dynamic-resource-allocation v0.0.0 k8s.io/endpointslice v0.0.0 @@ -203,6 +203,7 @@ require ( go.etcd.io/etcd/raft/v3 v3.5.13 // indirect go.etcd.io/etcd/server/v3 v3.5.13 // indirect go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 // indirect go.opentelemetry.io/otel/metric v1.20.0 // indirect diff --git a/pkg/kubelet/apis/podresources/client.go b/pkg/kubelet/apis/podresources/client.go index fcc6f1b903d..0bda54661d8 100644 --- a/pkg/kubelet/apis/podresources/client.go +++ b/pkg/kubelet/apis/podresources/client.go @@ -24,9 +24,9 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" + "k8s.io/cri-client/pkg/util" "k8s.io/kubelet/pkg/apis/podresources/v1" "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" - "k8s.io/kubernetes/pkg/kubelet/util" ) // Note: Consumers of the pod resources API should not be importing this package. diff --git a/pkg/kubelet/cri/remote/OWNERS b/pkg/kubelet/cri/remote/OWNERS deleted file mode 100644 index 63c9a4d394b..00000000000 --- a/pkg/kubelet/cri/remote/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -# See the OWNERS docs at https://go.k8s.io/owners - -approvers: - - feiskyer - - sig-node-approvers - - sig-node-cri-approvers diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index ebdd86317e3..b9530aefa43 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -63,6 +63,7 @@ import ( "k8s.io/component-helpers/apimachinery/lease" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + remote "k8s.io/cri-client/pkg" "k8s.io/klog/v2" pluginwatcherapi "k8s.io/kubelet/pkg/apis/pluginregistration/v1" statsapi "k8s.io/kubelet/pkg/apis/stats/v1alpha1" @@ -80,7 +81,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/configmap" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" - "k8s.io/kubernetes/pkg/kubelet/cri/remote" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/eviction" "k8s.io/kubernetes/pkg/kubelet/images" diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index 47b7292d695..7f6b1ed71f0 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -57,6 +57,8 @@ import ( featuregatetesting "k8s.io/component-base/featuregate/testing" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + remote "k8s.io/cri-client/pkg" + fakeremote "k8s.io/cri-client/pkg/fake" "k8s.io/klog/v2" "k8s.io/klog/v2/ktesting" "k8s.io/kubernetes/pkg/features" @@ -68,8 +70,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/configmap" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" - "k8s.io/kubernetes/pkg/kubelet/cri/remote" - fakeremote "k8s.io/kubernetes/pkg/kubelet/cri/remote/fake" "k8s.io/kubernetes/pkg/kubelet/eviction" "k8s.io/kubernetes/pkg/kubelet/images" "k8s.io/kubernetes/pkg/kubelet/kuberuntime" diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container.go b/pkg/kubelet/kuberuntime/kuberuntime_container.go index 3b534f1536f..765416cb0ab 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container.go @@ -48,10 +48,10 @@ import ( "k8s.io/apimachinery/pkg/util/sets" utilfeature "k8s.io/apiserver/pkg/util/feature" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + remote "k8s.io/cri-client/pkg" kubelettypes "k8s.io/kubelet/pkg/types" "k8s.io/kubernetes/pkg/features" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" - "k8s.io/kubernetes/pkg/kubelet/cri/remote" "k8s.io/kubernetes/pkg/kubelet/events" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" "k8s.io/kubernetes/pkg/kubelet/types" diff --git a/pkg/kubelet/kuberuntime/logs/logs.go b/pkg/kubelet/kuberuntime/logs/logs.go index b22734d792c..ebeaef5c98a 100644 --- a/pkg/kubelet/kuberuntime/logs/logs.go +++ b/pkg/kubelet/kuberuntime/logs/logs.go @@ -35,7 +35,7 @@ import ( v1 "k8s.io/api/core/v1" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" - "k8s.io/kubernetes/pkg/kubelet/cri/remote" + remote "k8s.io/cri-client/pkg" "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/util/tail" ) diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go index 2e96ffb4cd8..0da53926ec5 100644 --- a/pkg/kubelet/server/server.go +++ b/pkg/kubelet/server/server.go @@ -67,6 +67,7 @@ import ( "k8s.io/component-base/metrics/legacyregistry" "k8s.io/component-base/metrics/prometheus/slis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + "k8s.io/cri-client/pkg/util" podresourcesapi "k8s.io/kubelet/pkg/apis/podresources/v1" podresourcesapiv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" "k8s.io/kubelet/pkg/cri/streaming" @@ -84,7 +85,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/prober" servermetrics "k8s.io/kubernetes/pkg/kubelet/server/metrics" "k8s.io/kubernetes/pkg/kubelet/server/stats" - "k8s.io/kubernetes/pkg/kubelet/util" ) func init() { diff --git a/pkg/kubelet/util/util_unix.go b/pkg/kubelet/util/util_unix.go index c1dd608a7ea..0664b6a4248 100644 --- a/pkg/kubelet/util/util_unix.go +++ b/pkg/kubelet/util/util_unix.go @@ -20,15 +20,8 @@ limitations under the License. package util import ( - "context" - "fmt" - "net" "net/url" - "os" "path/filepath" - - "golang.org/x/sys/unix" - "k8s.io/klog/v2" ) const ( @@ -36,97 +29,6 @@ const ( unixProtocol = "unix" ) -// CreateListener creates a listener on the specified endpoint. -func CreateListener(endpoint string) (net.Listener, error) { - protocol, addr, err := parseEndpointWithFallbackProtocol(endpoint, unixProtocol) - if err != nil { - return nil, err - } - if protocol != unixProtocol { - return nil, fmt.Errorf("only support unix socket endpoint") - } - - // Unlink to cleanup the previous socket file. - err = unix.Unlink(addr) - if err != nil && !os.IsNotExist(err) { - return nil, fmt.Errorf("failed to unlink socket file %q: %v", addr, err) - } - - if err := os.MkdirAll(filepath.Dir(addr), 0750); err != nil { - return nil, fmt.Errorf("error creating socket directory %q: %v", filepath.Dir(addr), err) - } - - // Create the socket on a tempfile and move it to the destination socket to handle improper cleanup - file, err := os.CreateTemp(filepath.Dir(addr), "") - if err != nil { - return nil, fmt.Errorf("failed to create temporary file: %v", err) - } - - if err := os.Remove(file.Name()); err != nil { - return nil, fmt.Errorf("failed to remove temporary file: %v", err) - } - - l, err := net.Listen(protocol, file.Name()) - if err != nil { - return nil, err - } - - if err = os.Rename(file.Name(), addr); err != nil { - return nil, fmt.Errorf("failed to move temporary file to addr %q: %v", addr, err) - } - - return l, nil -} - -// GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer. -func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error) { - protocol, addr, err := parseEndpointWithFallbackProtocol(endpoint, unixProtocol) - if err != nil { - return "", nil, err - } - if protocol != unixProtocol { - return "", nil, fmt.Errorf("only support unix socket endpoint") - } - - return addr, dial, nil -} - -func dial(ctx context.Context, addr string) (net.Conn, error) { - return (&net.Dialer{}).DialContext(ctx, unixProtocol, addr) -} - -func parseEndpointWithFallbackProtocol(endpoint string, fallbackProtocol string) (protocol string, addr string, err error) { - if protocol, addr, err = parseEndpoint(endpoint); err != nil && protocol == "" { - fallbackEndpoint := fallbackProtocol + "://" + endpoint - protocol, addr, err = parseEndpoint(fallbackEndpoint) - if err == nil { - klog.InfoS("Using this endpoint is deprecated, please consider using full URL format", "endpoint", endpoint, "URL", fallbackEndpoint) - } - } - return -} - -func parseEndpoint(endpoint string) (string, string, error) { - u, err := url.Parse(endpoint) - if err != nil { - return "", "", err - } - - switch u.Scheme { - case "tcp": - return "tcp", u.Host, nil - - case "unix": - return "unix", u.Path, nil - - case "": - return "", "", fmt.Errorf("using %q as endpoint is deprecated, please consider using full url format", endpoint) - - default: - return u.Scheme, "", fmt.Errorf("protocol %q not supported", u.Scheme) - } -} - // LocalEndpoint returns the full path to a unix socket at the given endpoint func LocalEndpoint(path, file string) (string, error) { u := url.URL{ diff --git a/pkg/kubelet/util/util_unix_test.go b/pkg/kubelet/util/util_unix_test.go index 6b2ab3eb2e4..62bf533e1b9 100644 --- a/pkg/kubelet/util/util_unix_test.go +++ b/pkg/kubelet/util/util_unix_test.go @@ -25,98 +25,6 @@ import ( "github.com/stretchr/testify/assert" ) -func TestParseEndpoint(t *testing.T) { - tests := []struct { - endpoint string - expectError bool - expectedProtocol string - expectedAddr string - }{ - { - endpoint: "unix:///tmp/s1.sock", - expectedProtocol: "unix", - expectedAddr: "/tmp/s1.sock", - }, - { - endpoint: "tcp://localhost:15880", - expectedProtocol: "tcp", - expectedAddr: "localhost:15880", - }, - { - endpoint: "npipe://./pipe/mypipe", - expectedProtocol: "npipe", - expectError: true, - }, - { - endpoint: "tcp1://abc", - expectedProtocol: "tcp1", - expectError: true, - }, - { - endpoint: "a b c", - expectError: true, - }, - } - - for _, test := range tests { - protocol, addr, err := parseEndpoint(test.endpoint) - assert.Equal(t, test.expectedProtocol, protocol) - if test.expectError { - assert.NotNil(t, err, "Expect error during parsing %q", test.endpoint) - continue - } - assert.Nil(t, err, "Expect no error during parsing %q", test.endpoint) - assert.Equal(t, test.expectedAddr, addr) - } - -} - -func TestGetAddressAndDialer(t *testing.T) { - tests := []struct { - endpoint string - expectError bool - expectedAddr string - }{ - { - endpoint: "unix:///tmp/s1.sock", - expectError: false, - expectedAddr: "/tmp/s1.sock", - }, - { - endpoint: "unix:///tmp/f6.sock", - expectError: false, - expectedAddr: "/tmp/f6.sock", - }, - { - endpoint: "tcp://localhost:9090", - expectError: true, - }, - { - // The misspelling is intentional to make it error - endpoint: "htta://free-test.com", - expectError: true, - }, - { - endpoint: "https://www.youtube.com/", - expectError: true, - }, - { - endpoint: "http://www.baidu.com/", - expectError: true, - }, - } - for _, test := range tests { - // just test addr and err - addr, _, err := GetAddressAndDialer(test.endpoint) - if test.expectError { - assert.NotNil(t, err, "expected error during parsing %s", test.endpoint) - continue - } - assert.Nil(t, err, "expected no error during parsing %s", test.endpoint) - assert.Equal(t, test.expectedAddr, addr) - } -} - func TestLocalEndpoint(t *testing.T) { tests := []struct { path string diff --git a/pkg/kubelet/util/util_unsupported.go b/pkg/kubelet/util/util_unsupported.go index 054c36230ef..e95a7c583a8 100644 --- a/pkg/kubelet/util/util_unsupported.go +++ b/pkg/kubelet/util/util_unsupported.go @@ -20,22 +20,10 @@ limitations under the License. package util import ( - "context" "fmt" - "net" "time" ) -// CreateListener creates a listener on the specified endpoint. -func CreateListener(endpoint string) (net.Listener, error) { - return nil, fmt.Errorf("CreateListener is unsupported in this build") -} - -// GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer. -func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error) { - return "", nil, fmt.Errorf("GetAddressAndDialer is unsupported in this build") -} - // LockAndCheckSubPath empty implementation func LockAndCheckSubPath(volumePath, subPath string) ([]uintptr, error) { return []uintptr{}, nil diff --git a/pkg/kubelet/util/util_windows.go b/pkg/kubelet/util/util_windows.go index 3837b45aa6a..81852dcf93a 100644 --- a/pkg/kubelet/util/util_windows.go +++ b/pkg/kubelet/util/util_windows.go @@ -20,95 +20,14 @@ limitations under the License. package util import ( - "context" "fmt" - "net" - "net/url" "path/filepath" "strings" "syscall" "time" - - "github.com/Microsoft/go-winio" ) -const ( - tcpProtocol = "tcp" - npipeProtocol = "npipe" -) - -// CreateListener creates a listener on the specified endpoint. -func CreateListener(endpoint string) (net.Listener, error) { - protocol, addr, err := parseEndpoint(endpoint) - if err != nil { - return nil, err - } - - switch protocol { - case tcpProtocol: - return net.Listen(tcpProtocol, addr) - - case npipeProtocol: - return winio.ListenPipe(addr, nil) - - default: - return nil, fmt.Errorf("only support tcp and npipe endpoint") - } -} - -// GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer. -func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error) { - protocol, addr, err := parseEndpoint(endpoint) - if err != nil { - return "", nil, err - } - - if protocol == tcpProtocol { - return addr, tcpDial, nil - } - - if protocol == npipeProtocol { - return addr, npipeDial, nil - } - - return "", nil, fmt.Errorf("only support tcp and npipe endpoint") -} - -func tcpDial(ctx context.Context, addr string) (net.Conn, error) { - return (&net.Dialer{}).DialContext(ctx, tcpProtocol, addr) -} - -func npipeDial(ctx context.Context, addr string) (net.Conn, error) { - return winio.DialPipeContext(ctx, addr) -} - -func parseEndpoint(endpoint string) (string, string, error) { - // url.Parse doesn't recognize \, so replace with / first. - endpoint = strings.Replace(endpoint, "\\", "/", -1) - u, err := url.Parse(endpoint) - if err != nil { - return "", "", err - } - - if u.Scheme == "tcp" { - return "tcp", u.Host, nil - } else if u.Scheme == "npipe" { - if strings.HasPrefix(u.Path, "//./pipe") { - return "npipe", u.Path, nil - } - - // fallback host if not provided. - host := u.Host - if host == "" { - host = "." - } - return "npipe", fmt.Sprintf("//%s%s", host, u.Path), nil - } else if u.Scheme == "" { - return "", "", fmt.Errorf("Using %q as endpoint is deprecated, please consider using full url format", endpoint) - } else { - return u.Scheme, "", fmt.Errorf("protocol %q not supported", u.Scheme) - } -} +const npipeProtocol = "npipe" // LocalEndpoint returns the full path to a named pipe at the given endpoint - unlike on unix, we can't use sockets. func LocalEndpoint(path, file string) (string, error) { diff --git a/pkg/kubelet/util/util_windows_test.go b/pkg/kubelet/util/util_windows_test.go index 9f59849f419..ace346adbe9 100644 --- a/pkg/kubelet/util/util_windows_test.go +++ b/pkg/kubelet/util/util_windows_test.go @@ -20,162 +20,19 @@ limitations under the License. package util import ( - "fmt" + "context" + "net" "reflect" "runtime" "testing" + "github.com/Microsoft/go-winio" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "k8s.io/cri-client/pkg/util" ) -func TestGetAddressAndDialer(t *testing.T) { - - // Compare dialer function by pointer - tcpDialPointer := reflect.ValueOf(tcpDial).Pointer() - npipeDialPointer := reflect.ValueOf(npipeDial).Pointer() - var nilDialPointer uintptr = 0x0 - - tests := []struct { - endpoint string - expectedAddr string - expectedDial uintptr - expectedError bool - }{ - { - endpoint: "tcp://localhost:15880", - expectedAddr: "localhost:15880", - expectedDial: tcpDialPointer, - expectedError: false, - }, - { - endpoint: "npipe://./pipe/mypipe", - expectedAddr: "//./pipe/mypipe", - expectedDial: npipeDialPointer, - expectedError: false, - }, - { - endpoint: "npipe:\\\\.\\pipe\\mypipe", - expectedAddr: "//./pipe/mypipe", - expectedDial: npipeDialPointer, - expectedError: false, - }, - { - endpoint: "unix:///tmp/s1.sock", - expectedAddr: "", - expectedDial: nilDialPointer, - expectedError: true, - }, - { - endpoint: "tcp1://abc", - expectedAddr: "", - expectedDial: nilDialPointer, - expectedError: true, - }, - { - endpoint: "a b c", - expectedAddr: "", - expectedDial: nilDialPointer, - expectedError: true, - }, - } - - for _, test := range tests { - expectedDialerName := runtime.FuncForPC(test.expectedDial).Name() - if expectedDialerName == "" { - expectedDialerName = "nilDial" - } - t.Run(fmt.Sprintf("Endpoint is %s, addr is %s and dialer is %s", - test.endpoint, test.expectedAddr, expectedDialerName), - func(t *testing.T) { - address, dialer, err := GetAddressAndDialer(test.endpoint) - - dialerPointer := reflect.ValueOf(dialer).Pointer() - actualDialerName := runtime.FuncForPC(dialerPointer).Name() - if actualDialerName == "" { - actualDialerName = "nilDial" - } - - assert.Equalf(t, test.expectedDial, dialerPointer, - "Expected dialer %s, but get %s", expectedDialerName, actualDialerName) - - assert.Equal(t, test.expectedAddr, address) - - if test.expectedError { - assert.NotNil(t, err, "Expect error during parsing %q", test.endpoint) - } else { - assert.Nil(t, err, "Expect no error during parsing %q", test.endpoint) - } - }) - } -} - -func TestParseEndpoint(t *testing.T) { - tests := []struct { - endpoint string - expectedError bool - expectedProtocol string - expectedAddr string - }{ - { - endpoint: "unix:///tmp/s1.sock", - expectedProtocol: "unix", - expectedError: true, - }, - { - endpoint: "tcp://localhost:15880", - expectedProtocol: "tcp", - expectedAddr: "localhost:15880", - }, - { - endpoint: "npipe://./pipe/mypipe", - expectedProtocol: "npipe", - expectedAddr: "//./pipe/mypipe", - }, - { - endpoint: "npipe:////./pipe/mypipe2", - expectedProtocol: "npipe", - expectedAddr: "//./pipe/mypipe2", - }, - { - endpoint: "npipe:/pipe/mypipe3", - expectedProtocol: "npipe", - expectedAddr: "//./pipe/mypipe3", - }, - { - endpoint: "npipe:\\\\.\\pipe\\mypipe4", - expectedProtocol: "npipe", - expectedAddr: "//./pipe/mypipe4", - }, - { - endpoint: "npipe:\\pipe\\mypipe5", - expectedProtocol: "npipe", - expectedAddr: "//./pipe/mypipe5", - }, - { - endpoint: "tcp1://abc", - expectedProtocol: "tcp1", - expectedError: true, - }, - { - endpoint: "a b c", - expectedError: true, - }, - } - - for _, test := range tests { - protocol, addr, err := parseEndpoint(test.endpoint) - assert.Equal(t, test.expectedProtocol, protocol) - if test.expectedError { - assert.NotNil(t, err, "Expect error during parsing %q", test.endpoint) - continue - } - require.Nil(t, err, "Expect no error during parsing %q", test.endpoint) - assert.Equal(t, test.expectedAddr, addr) - } - -} - func TestNormalizePath(t *testing.T) { tests := []struct { originalpath string @@ -241,6 +98,10 @@ func TestLocalEndpoint(t *testing.T) { } } +func npipeDial(ctx context.Context, addr string) (net.Conn, error) { + return winio.DialPipeContext(ctx, addr) +} + func TestLocalEndpointRoundTrip(t *testing.T) { npipeDialPointer := reflect.ValueOf(npipeDial).Pointer() expectedDialerName := runtime.FuncForPC(npipeDialPointer).Name() @@ -249,7 +110,7 @@ func TestLocalEndpointRoundTrip(t *testing.T) { fullPath, err := LocalEndpoint(`pod-resources`, "kubelet") require.NoErrorf(t, err, "Failed to create the local endpoint path") - address, dialer, err := GetAddressAndDialer(fullPath) + address, dialer, err := util.GetAddressAndDialer(fullPath) require.NoErrorf(t, err, "Failed to parse the endpoint path and get back address and dialer (path=%q)", fullPath) dialerPointer := reflect.ValueOf(dialer).Pointer() diff --git a/pkg/probe/exec/exec.go b/pkg/probe/exec/exec.go index cbaa0fffb84..5b32f2494e5 100644 --- a/pkg/probe/exec/exec.go +++ b/pkg/probe/exec/exec.go @@ -21,8 +21,8 @@ import ( "errors" utilfeature "k8s.io/apiserver/pkg/util/feature" + remote "k8s.io/cri-client/pkg" "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/kubelet/cri/remote" "k8s.io/kubernetes/pkg/kubelet/util/ioutils" "k8s.io/kubernetes/pkg/probe" diff --git a/pkg/probe/exec/exec_test.go b/pkg/probe/exec/exec_test.go index 52d292da88e..a4aef26e5d1 100644 --- a/pkg/probe/exec/exec_test.go +++ b/pkg/probe/exec/exec_test.go @@ -24,8 +24,8 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" + remote "k8s.io/cri-client/pkg" "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/kubelet/cri/remote" "k8s.io/kubernetes/pkg/probe" ) diff --git a/staging/publishing/import-restrictions.yaml b/staging/publishing/import-restrictions.yaml index 2a1106859db..fcb6bc63f68 100644 --- a/staging/publishing/import-restrictions.yaml +++ b/staging/publishing/import-restrictions.yaml @@ -303,6 +303,12 @@ - k8s.io/klog - k8s.io/utils -# TODO: enable when source code got transferred -# - baseImportPath: "./staging/src/k8s.io/cri-client" -# allowedImports: [] +- baseImportPath: "./staging/src/k8s.io/cri-client" + allowedImports: + - k8s.io/apimachinery + - k8s.io/apiserver + - k8s.io/component-base + - k8s.io/cri-api + - k8s.io/cri-client + - k8s.io/klog/v2 + - k8s.io/utils diff --git a/staging/publishing/rules.yaml b/staging/publishing/rules.yaml index 60f908d8dc4..fec62c76987 100644 --- a/staging/publishing/rules.yaml +++ b/staging/publishing/rules.yaml @@ -1497,6 +1497,17 @@ rules: branch: master dirs: - staging/src/k8s.io/cri-client + dependencies: + - repository: api + branch: master + - repository: apimachinery + branch: master + - repository: client-go + branch: master + - repository: component-base + branch: master + - repository: cri-api + branch: master library: true - destination: kubelet branches: diff --git a/staging/src/k8s.io/cri-client/go.mod b/staging/src/k8s.io/cri-client/go.mod index 075869f0b6a..f657213a132 100644 --- a/staging/src/k8s.io/cri-client/go.mod +++ b/staging/src/k8s.io/cri-client/go.mod @@ -4,4 +4,64 @@ module k8s.io/cri-client go 1.22.0 -replace k8s.io/cri-client => ../cri-client +require ( + github.com/Microsoft/go-winio v0.6.0 + github.com/stretchr/testify v1.8.4 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 + go.opentelemetry.io/otel/sdk v1.20.0 + go.opentelemetry.io/otel/trace v1.20.0 + golang.org/x/sys v0.18.0 + google.golang.org/grpc v1.59.0 + k8s.io/apimachinery v0.0.0 + k8s.io/component-base v0.0.0 + k8s.io/cri-api v0.0.0 + k8s.io/klog/v2 v2.120.1 + k8s.io/utils v0.0.0-20230726121419-3b25d923346b +) + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/felixge/httpsnoop v1.0.3 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.19.0 // indirect + github.com/prometheus/client_model v0.6.0 // indirect + github.com/prometheus/common v0.48.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 // indirect + go.opentelemetry.io/otel v1.20.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect + go.opentelemetry.io/otel/metric v1.20.0 // indirect + go.opentelemetry.io/proto/otlp v1.0.0 // indirect + golang.org/x/mod v0.15.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/oauth2 v0.20.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.18.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/client-go v0.0.0 // indirect +) + +replace ( + k8s.io/api => ../api + k8s.io/apimachinery => ../apimachinery + k8s.io/client-go => ../client-go + k8s.io/component-base => ../component-base + k8s.io/cri-api => ../cri-api + k8s.io/cri-client => ../cri-client +) diff --git a/staging/src/k8s.io/cri-client/go.sum b/staging/src/k8s.io/cri-client/go.sum index e69de29bb2d..85ee60124b5 100644 --- a/staging/src/k8s.io/cri-client/go.sum +++ b/staging/src/k8s.io/cri-client/go.sum @@ -0,0 +1,205 @@ +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= +cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= +github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= +github.com/onsi/gomega v1.31.0/go.mod h1:DW9aCi7U6Yi40wNVAvT6kzFnEVEI5n3DloYBiKiT6zk= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= +github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= +github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= +github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= +github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= +github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 h1:KfYpVmrjI7JuToy5k8XV3nkapjWx48k4E4JOtVstzQI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0/go.mod h1:SeQhzAEccGVZVEy7aH87Nh0km+utSpo1pTv6eMMop48= +go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc= +go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0= +go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA= +go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM= +go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM= +go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0= +go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ= +go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU= +go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= +golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808/go.mod h1:KG1lNk5ZFNssSZLrpVb4sMXKMpGwGXOxSG3rnu2gZQQ= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= +golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= +k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/pkg/kubelet/cri/remote/doc.go b/staging/src/k8s.io/cri-client/pkg/doc.go similarity index 97% rename from pkg/kubelet/cri/remote/doc.go rename to staging/src/k8s.io/cri-client/pkg/doc.go index 9571cbc595f..89b60c9195f 100644 --- a/pkg/kubelet/cri/remote/doc.go +++ b/staging/src/k8s.io/cri-client/pkg/doc.go @@ -16,4 +16,4 @@ limitations under the License. // Package remote contains gRPC implementation of internalapi.RuntimeService // and internalapi.ImageManagerService. -package remote +package cri diff --git a/pkg/kubelet/cri/remote/fake/doc.go b/staging/src/k8s.io/cri-client/pkg/fake/doc.go similarity index 100% rename from pkg/kubelet/cri/remote/fake/doc.go rename to staging/src/k8s.io/cri-client/pkg/fake/doc.go diff --git a/pkg/kubelet/cri/remote/fake/endpoint.go b/staging/src/k8s.io/cri-client/pkg/fake/endpoint.go similarity index 100% rename from pkg/kubelet/cri/remote/fake/endpoint.go rename to staging/src/k8s.io/cri-client/pkg/fake/endpoint.go diff --git a/pkg/kubelet/cri/remote/fake/endpoint_windows.go b/staging/src/k8s.io/cri-client/pkg/fake/endpoint_windows.go similarity index 100% rename from pkg/kubelet/cri/remote/fake/endpoint_windows.go rename to staging/src/k8s.io/cri-client/pkg/fake/endpoint_windows.go diff --git a/pkg/kubelet/cri/remote/fake/fake_image_service.go b/staging/src/k8s.io/cri-client/pkg/fake/fake_image_service.go similarity index 100% rename from pkg/kubelet/cri/remote/fake/fake_image_service.go rename to staging/src/k8s.io/cri-client/pkg/fake/fake_image_service.go diff --git a/pkg/kubelet/cri/remote/fake/fake_runtime.go b/staging/src/k8s.io/cri-client/pkg/fake/fake_runtime.go similarity index 99% rename from pkg/kubelet/cri/remote/fake/fake_runtime.go rename to staging/src/k8s.io/cri-client/pkg/fake/fake_runtime.go index f49fc0066a4..3c1c391cae4 100644 --- a/pkg/kubelet/cri/remote/fake/fake_runtime.go +++ b/staging/src/k8s.io/cri-client/pkg/fake/fake_runtime.go @@ -24,7 +24,7 @@ import ( "google.golang.org/grpc" kubeapi "k8s.io/cri-api/pkg/apis/runtime/v1" apitest "k8s.io/cri-api/pkg/apis/testing" - "k8s.io/kubernetes/pkg/kubelet/util" + "k8s.io/cri-client/pkg/util" utilexec "k8s.io/utils/exec" ) diff --git a/pkg/kubelet/cri/remote/remote_image.go b/staging/src/k8s.io/cri-client/pkg/remote_image.go similarity index 99% rename from pkg/kubelet/cri/remote/remote_image.go rename to staging/src/k8s.io/cri-client/pkg/remote_image.go index bef463c444d..638cb678790 100644 --- a/pkg/kubelet/cri/remote/remote_image.go +++ b/staging/src/k8s.io/cri-client/pkg/remote_image.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package remote +package cri import ( "context" @@ -30,11 +30,11 @@ import ( "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/status" tracing "k8s.io/component-base/tracing" + "k8s.io/cri-client/pkg/util" "k8s.io/klog/v2" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" - "k8s.io/kubernetes/pkg/kubelet/util" ) // remoteImageService is a gRPC implementation of internalapi.ImageManagerService. diff --git a/pkg/kubelet/cri/remote/remote_image_test.go b/staging/src/k8s.io/cri-client/pkg/remote_image_test.go similarity index 98% rename from pkg/kubelet/cri/remote/remote_image_test.go rename to staging/src/k8s.io/cri-client/pkg/remote_image_test.go index 96ddba7d60b..cd067c7c23d 100644 --- a/pkg/kubelet/cri/remote/remote_image_test.go +++ b/staging/src/k8s.io/cri-client/pkg/remote_image_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package remote +package cri import ( "context" @@ -29,8 +29,8 @@ import ( "go.opentelemetry.io/otel/trace/noop" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + "k8s.io/cri-client/pkg/util" "k8s.io/klog/v2" - "k8s.io/kubernetes/pkg/kubelet/util" ) func createRemoteImageServiceWithTracerProvider(endpoint string, tp oteltrace.TracerProvider, t *testing.T) internalapi.ImageManagerService { diff --git a/pkg/kubelet/cri/remote/remote_runtime.go b/staging/src/k8s.io/cri-client/pkg/remote_runtime.go similarity index 99% rename from pkg/kubelet/cri/remote/remote_runtime.go rename to staging/src/k8s.io/cri-client/pkg/remote_runtime.go index d81ccd33133..62d158a3125 100644 --- a/pkg/kubelet/cri/remote/remote_runtime.go +++ b/staging/src/k8s.io/cri-client/pkg/remote_runtime.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package remote +package cri import ( "context" @@ -35,8 +35,8 @@ import ( tracing "k8s.io/component-base/tracing" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + "k8s.io/cri-client/pkg/util" "k8s.io/klog/v2" - "k8s.io/kubernetes/pkg/kubelet/util" utilexec "k8s.io/utils/exec" ) diff --git a/pkg/kubelet/cri/remote/remote_runtime_test.go b/staging/src/k8s.io/cri-client/pkg/remote_runtime_test.go similarity index 95% rename from pkg/kubelet/cri/remote/remote_runtime_test.go rename to staging/src/k8s.io/cri-client/pkg/remote_runtime_test.go index 69173fb5703..f071b3c53a6 100644 --- a/pkg/kubelet/cri/remote/remote_runtime_test.go +++ b/staging/src/k8s.io/cri-client/pkg/remote_runtime_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package remote +package cri import ( "context" @@ -31,14 +31,12 @@ import ( "github.com/stretchr/testify/require" internalapi "k8s.io/cri-api/pkg/apis" apitest "k8s.io/cri-api/pkg/apis/testing" + fakeremote "k8s.io/cri-client/pkg/fake" + "k8s.io/cri-client/pkg/util" "k8s.io/klog/v2" - fakeremote "k8s.io/kubernetes/pkg/kubelet/cri/remote/fake" - "k8s.io/kubernetes/pkg/kubelet/util" ) -const ( - defaultConnectionTimeout = 15 * time.Second -) +const defaultConnectionTimeout = 15 * time.Second // createAndStartFakeRemoteRuntime creates and starts fakeremote.RemoteRuntime. // It returns the RemoteRuntime, endpoint on success. diff --git a/staging/src/k8s.io/cri-client/pkg/util/util_unix.go b/staging/src/k8s.io/cri-client/pkg/util/util_unix.go new file mode 100644 index 00000000000..73df89045f4 --- /dev/null +++ b/staging/src/k8s.io/cri-client/pkg/util/util_unix.go @@ -0,0 +1,124 @@ +//go:build freebsd || linux || darwin +// +build freebsd linux darwin + +/* +Copyright 2017 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 util + +import ( + "context" + "fmt" + "net" + "net/url" + "os" + "path/filepath" + + "golang.org/x/sys/unix" +) + +const ( + // unixProtocol is the network protocol of unix socket. + unixProtocol = "unix" +) + +// CreateListener creates a listener on the specified endpoint. +func CreateListener(endpoint string) (net.Listener, error) { + protocol, addr, err := parseEndpointWithFallbackProtocol(endpoint, unixProtocol) + if err != nil { + return nil, err + } + if protocol != unixProtocol { + return nil, fmt.Errorf("only support unix socket endpoint") + } + + // Unlink to cleanup the previous socket file. + err = unix.Unlink(addr) + if err != nil && !os.IsNotExist(err) { + return nil, fmt.Errorf("failed to unlink socket file %q: %w", addr, err) + } + + if err := os.MkdirAll(filepath.Dir(addr), 0750); err != nil { + return nil, fmt.Errorf("error creating socket directory %q: %w", filepath.Dir(addr), err) + } + + // Create the socket on a tempfile and move it to the destination socket to handle improper cleanup + file, err := os.CreateTemp(filepath.Dir(addr), "") + if err != nil { + return nil, fmt.Errorf("failed to create temporary file: %w", err) + } + + if err := os.Remove(file.Name()); err != nil { + return nil, fmt.Errorf("failed to remove temporary file: %w", err) + } + + l, err := net.Listen(protocol, file.Name()) + if err != nil { + return nil, err + } + + if err = os.Rename(file.Name(), addr); err != nil { + return nil, fmt.Errorf("failed to move temporary file to addr %q: %w", addr, err) + } + + return l, nil +} + +// GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer. +func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error) { + protocol, addr, err := parseEndpointWithFallbackProtocol(endpoint, unixProtocol) + if err != nil { + return "", nil, err + } + if protocol != unixProtocol { + return "", nil, fmt.Errorf("only support unix socket endpoint") + } + + return addr, dial, nil +} + +func dial(ctx context.Context, addr string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, unixProtocol, addr) +} + +func parseEndpointWithFallbackProtocol(endpoint string, fallbackProtocol string) (protocol string, addr string, err error) { + if protocol, addr, err = parseEndpoint(endpoint); err != nil && protocol == "" { + fallbackEndpoint := fallbackProtocol + "://" + endpoint + protocol, addr, err = parseEndpoint(fallbackEndpoint) + } + return +} + +func parseEndpoint(endpoint string) (string, string, error) { + u, err := url.Parse(endpoint) + if err != nil { + return "", "", err + } + + switch u.Scheme { + case "tcp": + return "tcp", u.Host, nil + + case "unix": + return "unix", u.Path, nil + + case "": + return "", "", fmt.Errorf("using %q as endpoint is deprecated, please consider using full url format", endpoint) + + default: + return u.Scheme, "", fmt.Errorf("protocol %q not supported", u.Scheme) + } +} diff --git a/staging/src/k8s.io/cri-client/pkg/util/util_unix_test.go b/staging/src/k8s.io/cri-client/pkg/util/util_unix_test.go new file mode 100644 index 00000000000..3b5337f8336 --- /dev/null +++ b/staging/src/k8s.io/cri-client/pkg/util/util_unix_test.go @@ -0,0 +1,118 @@ +//go:build freebsd || linux || darwin +// +build freebsd linux darwin + +/* +Copyright 2018 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 util + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestParseEndpoint(t *testing.T) { + tests := []struct { + endpoint string + expectError bool + expectedProtocol string + expectedAddr string + }{ + { + endpoint: "unix:///tmp/s1.sock", + expectedProtocol: "unix", + expectedAddr: "/tmp/s1.sock", + }, + { + endpoint: "tcp://localhost:15880", + expectedProtocol: "tcp", + expectedAddr: "localhost:15880", + }, + { + endpoint: "npipe://./pipe/mypipe", + expectedProtocol: "npipe", + expectError: true, + }, + { + endpoint: "tcp1://abc", + expectedProtocol: "tcp1", + expectError: true, + }, + { + endpoint: "a b c", + expectError: true, + }, + } + + for _, test := range tests { + protocol, addr, err := parseEndpoint(test.endpoint) + assert.Equal(t, test.expectedProtocol, protocol) + if test.expectError { + assert.NotNil(t, err, "Expect error during parsing %q", test.endpoint) + continue + } + assert.Nil(t, err, "Expect no error during parsing %q", test.endpoint) + assert.Equal(t, test.expectedAddr, addr) + } + +} + +func TestGetAddressAndDialer(t *testing.T) { + tests := []struct { + endpoint string + expectError bool + expectedAddr string + }{ + { + endpoint: "unix:///tmp/s1.sock", + expectError: false, + expectedAddr: "/tmp/s1.sock", + }, + { + endpoint: "unix:///tmp/f6.sock", + expectError: false, + expectedAddr: "/tmp/f6.sock", + }, + { + endpoint: "tcp://localhost:9090", + expectError: true, + }, + { + // The misspelling is intentional to make it error + endpoint: "htta://free-test.com", + expectError: true, + }, + { + endpoint: "https://www.youtube.com/", + expectError: true, + }, + { + endpoint: "http://www.baidu.com/", + expectError: true, + }, + } + for _, test := range tests { + // just test addr and err + addr, _, err := GetAddressAndDialer(test.endpoint) + if test.expectError { + assert.NotNil(t, err, "expected error during parsing %s", test.endpoint) + continue + } + assert.Nil(t, err, "expected no error during parsing %s", test.endpoint) + assert.Equal(t, test.expectedAddr, addr) + } +} diff --git a/staging/src/k8s.io/cri-client/pkg/util/util_unsupported.go b/staging/src/k8s.io/cri-client/pkg/util/util_unsupported.go new file mode 100644 index 00000000000..bfb729897bd --- /dev/null +++ b/staging/src/k8s.io/cri-client/pkg/util/util_unsupported.go @@ -0,0 +1,36 @@ +//go:build !freebsd && !linux && !windows && !darwin +// +build !freebsd,!linux,!windows,!darwin + +/* +Copyright 2017 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 util + +import ( + "context" + "fmt" + "net" +) + +// CreateListener creates a listener on the specified endpoint. +func CreateListener(endpoint string) (net.Listener, error) { + return nil, fmt.Errorf("CreateListener is unsupported in this build") +} + +// GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer. +func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error) { + return "", nil, fmt.Errorf("GetAddressAndDialer is unsupported in this build") +} diff --git a/staging/src/k8s.io/cri-client/pkg/util/util_windows.go b/staging/src/k8s.io/cri-client/pkg/util/util_windows.go new file mode 100644 index 00000000000..96d0634ef0b --- /dev/null +++ b/staging/src/k8s.io/cri-client/pkg/util/util_windows.go @@ -0,0 +1,108 @@ +//go:build windows +// +build windows + +/* +Copyright 2017 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 util + +import ( + "context" + "fmt" + "net" + "net/url" + "strings" + + "github.com/Microsoft/go-winio" +) + +const ( + tcpProtocol = "tcp" + npipeProtocol = "npipe" +) + +// CreateListener creates a listener on the specified endpoint. +func CreateListener(endpoint string) (net.Listener, error) { + protocol, addr, err := parseEndpoint(endpoint) + if err != nil { + return nil, err + } + + switch protocol { + case tcpProtocol: + return net.Listen(tcpProtocol, addr) + + case npipeProtocol: + return winio.ListenPipe(addr, nil) + + default: + return nil, fmt.Errorf("only support tcp and npipe endpoint") + } +} + +// GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer. +func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error) { + protocol, addr, err := parseEndpoint(endpoint) + if err != nil { + return "", nil, err + } + + if protocol == tcpProtocol { + return addr, tcpDial, nil + } + + if protocol == npipeProtocol { + return addr, npipeDial, nil + } + + return "", nil, fmt.Errorf("only support tcp and npipe endpoint") +} + +func tcpDial(ctx context.Context, addr string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, tcpProtocol, addr) +} + +func npipeDial(ctx context.Context, addr string) (net.Conn, error) { + return winio.DialPipeContext(ctx, addr) +} + +func parseEndpoint(endpoint string) (string, string, error) { + // url.Parse doesn't recognize \, so replace with / first. + endpoint = strings.Replace(endpoint, "\\", "/", -1) + u, err := url.Parse(endpoint) + if err != nil { + return "", "", err + } + + if u.Scheme == "tcp" { + return "tcp", u.Host, nil + } else if u.Scheme == "npipe" { + if strings.HasPrefix(u.Path, "//./pipe") { + return "npipe", u.Path, nil + } + + // fallback host if not provided. + host := u.Host + if host == "" { + host = "." + } + return "npipe", fmt.Sprintf("//%s%s", host, u.Path), nil + } else if u.Scheme == "" { + return "", "", fmt.Errorf("Using %q as endpoint is deprecated, please consider using full url format", endpoint) + } else { + return u.Scheme, "", fmt.Errorf("protocol %q not supported", u.Scheme) + } +} diff --git a/staging/src/k8s.io/cri-client/pkg/util/util_windows_test.go b/staging/src/k8s.io/cri-client/pkg/util/util_windows_test.go new file mode 100644 index 00000000000..986f59c8863 --- /dev/null +++ b/staging/src/k8s.io/cri-client/pkg/util/util_windows_test.go @@ -0,0 +1,176 @@ +//go:build windows +// +build windows + +/* +Copyright 2018 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 util + +import ( + "fmt" + "reflect" + "runtime" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGetAddressAndDialer(t *testing.T) { + + // Compare dialer function by pointer + tcpDialPointer := reflect.ValueOf(tcpDial).Pointer() + npipeDialPointer := reflect.ValueOf(npipeDial).Pointer() + var nilDialPointer uintptr = 0x0 + + tests := []struct { + endpoint string + expectedAddr string + expectedDial uintptr + expectedError bool + }{ + { + endpoint: "tcp://localhost:15880", + expectedAddr: "localhost:15880", + expectedDial: tcpDialPointer, + expectedError: false, + }, + { + endpoint: "npipe://./pipe/mypipe", + expectedAddr: "//./pipe/mypipe", + expectedDial: npipeDialPointer, + expectedError: false, + }, + { + endpoint: "npipe:\\\\.\\pipe\\mypipe", + expectedAddr: "//./pipe/mypipe", + expectedDial: npipeDialPointer, + expectedError: false, + }, + { + endpoint: "unix:///tmp/s1.sock", + expectedAddr: "", + expectedDial: nilDialPointer, + expectedError: true, + }, + { + endpoint: "tcp1://abc", + expectedAddr: "", + expectedDial: nilDialPointer, + expectedError: true, + }, + { + endpoint: "a b c", + expectedAddr: "", + expectedDial: nilDialPointer, + expectedError: true, + }, + } + + for _, test := range tests { + expectedDialerName := runtime.FuncForPC(test.expectedDial).Name() + if expectedDialerName == "" { + expectedDialerName = "nilDial" + } + t.Run(fmt.Sprintf("Endpoint is %s, addr is %s and dialer is %s", + test.endpoint, test.expectedAddr, expectedDialerName), + func(t *testing.T) { + address, dialer, err := GetAddressAndDialer(test.endpoint) + + dialerPointer := reflect.ValueOf(dialer).Pointer() + actualDialerName := runtime.FuncForPC(dialerPointer).Name() + if actualDialerName == "" { + actualDialerName = "nilDial" + } + + assert.Equalf(t, test.expectedDial, dialerPointer, + "Expected dialer %s, but get %s", expectedDialerName, actualDialerName) + + assert.Equal(t, test.expectedAddr, address) + + if test.expectedError { + assert.NotNil(t, err, "Expect error during parsing %q", test.endpoint) + } else { + assert.Nil(t, err, "Expect no error during parsing %q", test.endpoint) + } + }) + } +} + +func TestParseEndpoint(t *testing.T) { + tests := []struct { + endpoint string + expectedError bool + expectedProtocol string + expectedAddr string + }{ + { + endpoint: "unix:///tmp/s1.sock", + expectedProtocol: "unix", + expectedError: true, + }, + { + endpoint: "tcp://localhost:15880", + expectedProtocol: "tcp", + expectedAddr: "localhost:15880", + }, + { + endpoint: "npipe://./pipe/mypipe", + expectedProtocol: "npipe", + expectedAddr: "//./pipe/mypipe", + }, + { + endpoint: "npipe:////./pipe/mypipe2", + expectedProtocol: "npipe", + expectedAddr: "//./pipe/mypipe2", + }, + { + endpoint: "npipe:/pipe/mypipe3", + expectedProtocol: "npipe", + expectedAddr: "//./pipe/mypipe3", + }, + { + endpoint: "npipe:\\\\.\\pipe\\mypipe4", + expectedProtocol: "npipe", + expectedAddr: "//./pipe/mypipe4", + }, + { + endpoint: "npipe:\\pipe\\mypipe5", + expectedProtocol: "npipe", + expectedAddr: "//./pipe/mypipe5", + }, + { + endpoint: "tcp1://abc", + expectedProtocol: "tcp1", + expectedError: true, + }, + { + endpoint: "a b c", + expectedError: true, + }, + } + + for _, test := range tests { + protocol, addr, err := parseEndpoint(test.endpoint) + assert.Equal(t, test.expectedProtocol, protocol) + if test.expectedError { + assert.NotNil(t, err, "Expect error during parsing %q", test.endpoint) + continue + } + require.Nil(t, err, "Expect no error during parsing %q", test.endpoint) + assert.Equal(t, test.expectedAddr, addr) + } +} diff --git a/pkg/kubelet/cri/remote/utils.go b/staging/src/k8s.io/cri-client/pkg/utils.go similarity index 99% rename from pkg/kubelet/cri/remote/utils.go rename to staging/src/k8s.io/cri-client/pkg/utils.go index ad7dfddbe01..782096ddef1 100644 --- a/pkg/kubelet/cri/remote/utils.go +++ b/staging/src/k8s.io/cri-client/pkg/utils.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package remote +package cri import ( "fmt" diff --git a/pkg/kubelet/cri/remote/utils_test.go b/staging/src/k8s.io/cri-client/pkg/utils_test.go similarity index 99% rename from pkg/kubelet/cri/remote/utils_test.go rename to staging/src/k8s.io/cri-client/pkg/utils_test.go index f7869ef4fec..e007442d8fa 100644 --- a/pkg/kubelet/cri/remote/utils_test.go +++ b/staging/src/k8s.io/cri-client/pkg/utils_test.go @@ -14,13 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -package remote +package cri import ( "fmt" + "testing" + "github.com/stretchr/testify/assert" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" - "testing" ) func makePodSandboxMetadata(name, namespace, uid string) *runtimeapi.PodSandboxMetadata { diff --git a/test/e2e_node/util.go b/test/e2e_node/util.go index 7bc7729cfd2..716795f1db4 100644 --- a/test/e2e_node/util.go +++ b/test/e2e_node/util.go @@ -47,6 +47,7 @@ import ( "k8s.io/component-base/featuregate" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + remote "k8s.io/cri-client/pkg" "k8s.io/klog/v2" kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1" kubeletpodresourcesv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" @@ -56,7 +57,6 @@ import ( kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/apis/podresources" "k8s.io/kubernetes/pkg/kubelet/cm" - "k8s.io/kubernetes/pkg/kubelet/cri/remote" kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics" "k8s.io/kubernetes/pkg/kubelet/util" diff --git a/vendor/modules.txt b/vendor/modules.txt index a380f6f12e6..1419195a0a4 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1105,6 +1105,8 @@ gopkg.in/yaml.v3 ## explicit; go 1.22.0 # k8s.io/cri-api v0.0.0 => ./staging/src/k8s.io/cri-api ## explicit; go 1.22.0 +# k8s.io/cri-client v0.0.0 => ./staging/src/k8s.io/cri-client +## explicit; go 1.22.0 # k8s.io/csi-translation-lib v0.0.0 => ./staging/src/k8s.io/csi-translation-lib ## explicit; go 1.22.0 # k8s.io/dynamic-resource-allocation v0.0.0 => ./staging/src/k8s.io/dynamic-resource-allocation