mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 18:28:13 +00:00 
			
		
		
		
	Move pkg/kubelet/cri/remote to cri-client
Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
This commit is contained in:
		| @@ -41,13 +41,13 @@ import ( | |||||||
| 	_ "k8s.io/component-base/metrics/prometheus/version"    // for version metric registration | 	_ "k8s.io/component-base/metrics/prometheus/version"    // for version metric registration | ||||||
| 	"k8s.io/component-base/version" | 	"k8s.io/component-base/version" | ||||||
| 	"k8s.io/component-base/version/verflag" | 	"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/api/legacyscheme" | ||||||
| 	"k8s.io/kubernetes/pkg/cluster/ports" | 	"k8s.io/kubernetes/pkg/cluster/ports" | ||||||
| 	cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" | 	cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap" | 	"k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/cm" | 	"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" | 	"k8s.io/kubernetes/pkg/kubemark" | ||||||
| 	kubemarkproxy "k8s.io/kubernetes/pkg/proxy/kubemark" | 	kubemarkproxy "k8s.io/kubernetes/pkg/proxy/kubemark" | ||||||
| 	utilflag "k8s.io/kubernetes/pkg/util/flag" | 	utilflag "k8s.io/kubernetes/pkg/util/flag" | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								go.mod
									
									
									
									
									
								
							| @@ -64,7 +64,6 @@ require ( | |||||||
| 	go.etcd.io/etcd/client/pkg/v3 v3.5.13 | 	go.etcd.io/etcd/client/pkg/v3 v3.5.13 | ||||||
| 	go.etcd.io/etcd/client/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/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 v1.20.0 | ||||||
| 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 | 	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 | ||||||
| 	go.opentelemetry.io/otel/sdk 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/component-helpers v0.0.0 | ||||||
| 	k8s.io/controller-manager v0.0.0 | 	k8s.io/controller-manager v0.0.0 | ||||||
| 	k8s.io/cri-api 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/csi-translation-lib v0.0.0 | ||||||
| 	k8s.io/dynamic-resource-allocation v0.0.0 | 	k8s.io/dynamic-resource-allocation v0.0.0 | ||||||
| 	k8s.io/endpointslice 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/raft/v3 v3.5.13 // indirect | ||||||
| 	go.etcd.io/etcd/server/v3 v3.5.13 // indirect | 	go.etcd.io/etcd/server/v3 v3.5.13 // indirect | ||||||
| 	go.opencensus.io v0.24.0 // 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/contrib/instrumentation/net/http/otelhttp v0.44.0 // indirect | ||||||
| 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 // indirect | 	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 // indirect | ||||||
| 	go.opentelemetry.io/otel/metric v1.20.0 // indirect | 	go.opentelemetry.io/otel/metric v1.20.0 // indirect | ||||||
|   | |||||||
| @@ -24,9 +24,9 @@ import ( | |||||||
| 	"google.golang.org/grpc" | 	"google.golang.org/grpc" | ||||||
| 	"google.golang.org/grpc/credentials/insecure" | 	"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/v1" | ||||||
| 	"k8s.io/kubelet/pkg/apis/podresources/v1alpha1" | 	"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. | // Note: Consumers of the pod resources API should not be importing this package. | ||||||
|   | |||||||
| @@ -1,6 +0,0 @@ | |||||||
| # See the OWNERS docs at https://go.k8s.io/owners |  | ||||||
|  |  | ||||||
| approvers: |  | ||||||
|   - feiskyer |  | ||||||
|   - sig-node-approvers |  | ||||||
|   - sig-node-cri-approvers |  | ||||||
| @@ -63,6 +63,7 @@ import ( | |||||||
| 	"k8s.io/component-helpers/apimachinery/lease" | 	"k8s.io/component-helpers/apimachinery/lease" | ||||||
| 	internalapi "k8s.io/cri-api/pkg/apis" | 	internalapi "k8s.io/cri-api/pkg/apis" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
|  | 	remote "k8s.io/cri-client/pkg" | ||||||
| 	"k8s.io/klog/v2" | 	"k8s.io/klog/v2" | ||||||
| 	pluginwatcherapi "k8s.io/kubelet/pkg/apis/pluginregistration/v1" | 	pluginwatcherapi "k8s.io/kubelet/pkg/apis/pluginregistration/v1" | ||||||
| 	statsapi "k8s.io/kubelet/pkg/apis/stats/v1alpha1" | 	statsapi "k8s.io/kubelet/pkg/apis/stats/v1alpha1" | ||||||
| @@ -80,7 +81,6 @@ import ( | |||||||
| 	"k8s.io/kubernetes/pkg/kubelet/config" | 	"k8s.io/kubernetes/pkg/kubelet/config" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/configmap" | 	"k8s.io/kubernetes/pkg/kubelet/configmap" | ||||||
| 	kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" | 	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/events" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/eviction" | 	"k8s.io/kubernetes/pkg/kubelet/eviction" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/images" | 	"k8s.io/kubernetes/pkg/kubelet/images" | ||||||
|   | |||||||
| @@ -57,6 +57,8 @@ import ( | |||||||
| 	featuregatetesting "k8s.io/component-base/featuregate/testing" | 	featuregatetesting "k8s.io/component-base/featuregate/testing" | ||||||
| 	internalapi "k8s.io/cri-api/pkg/apis" | 	internalapi "k8s.io/cri-api/pkg/apis" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	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" | ||||||
| 	"k8s.io/klog/v2/ktesting" | 	"k8s.io/klog/v2/ktesting" | ||||||
| 	"k8s.io/kubernetes/pkg/features" | 	"k8s.io/kubernetes/pkg/features" | ||||||
| @@ -68,8 +70,6 @@ import ( | |||||||
| 	"k8s.io/kubernetes/pkg/kubelet/configmap" | 	"k8s.io/kubernetes/pkg/kubelet/configmap" | ||||||
| 	kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" | 	kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" | ||||||
| 	containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" | 	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/eviction" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/images" | 	"k8s.io/kubernetes/pkg/kubelet/images" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/kuberuntime" | 	"k8s.io/kubernetes/pkg/kubelet/kuberuntime" | ||||||
|   | |||||||
| @@ -48,10 +48,10 @@ import ( | |||||||
| 	"k8s.io/apimachinery/pkg/util/sets" | 	"k8s.io/apimachinery/pkg/util/sets" | ||||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
|  | 	remote "k8s.io/cri-client/pkg" | ||||||
| 	kubelettypes "k8s.io/kubelet/pkg/types" | 	kubelettypes "k8s.io/kubelet/pkg/types" | ||||||
| 	"k8s.io/kubernetes/pkg/features" | 	"k8s.io/kubernetes/pkg/features" | ||||||
| 	kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" | 	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/events" | ||||||
| 	proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" | 	proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/types" | 	"k8s.io/kubernetes/pkg/kubelet/types" | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ import ( | |||||||
| 	v1 "k8s.io/api/core/v1" | 	v1 "k8s.io/api/core/v1" | ||||||
| 	internalapi "k8s.io/cri-api/pkg/apis" | 	internalapi "k8s.io/cri-api/pkg/apis" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	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/kubelet/types" | ||||||
| 	"k8s.io/kubernetes/pkg/util/tail" | 	"k8s.io/kubernetes/pkg/util/tail" | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -67,6 +67,7 @@ import ( | |||||||
| 	"k8s.io/component-base/metrics/legacyregistry" | 	"k8s.io/component-base/metrics/legacyregistry" | ||||||
| 	"k8s.io/component-base/metrics/prometheus/slis" | 	"k8s.io/component-base/metrics/prometheus/slis" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
|  | 	"k8s.io/cri-client/pkg/util" | ||||||
| 	podresourcesapi "k8s.io/kubelet/pkg/apis/podresources/v1" | 	podresourcesapi "k8s.io/kubelet/pkg/apis/podresources/v1" | ||||||
| 	podresourcesapiv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" | 	podresourcesapiv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" | ||||||
| 	"k8s.io/kubelet/pkg/cri/streaming" | 	"k8s.io/kubelet/pkg/cri/streaming" | ||||||
| @@ -84,7 +85,6 @@ import ( | |||||||
| 	"k8s.io/kubernetes/pkg/kubelet/prober" | 	"k8s.io/kubernetes/pkg/kubelet/prober" | ||||||
| 	servermetrics "k8s.io/kubernetes/pkg/kubelet/server/metrics" | 	servermetrics "k8s.io/kubernetes/pkg/kubelet/server/metrics" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/server/stats" | 	"k8s.io/kubernetes/pkg/kubelet/server/stats" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/util" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func init() { | func init() { | ||||||
|   | |||||||
| @@ -20,15 +20,8 @@ limitations under the License. | |||||||
| package util | package util | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"context" |  | ||||||
| 	"fmt" |  | ||||||
| 	"net" |  | ||||||
| 	"net/url" | 	"net/url" | ||||||
| 	"os" |  | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
|  |  | ||||||
| 	"golang.org/x/sys/unix" |  | ||||||
| 	"k8s.io/klog/v2" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| const ( | const ( | ||||||
| @@ -36,97 +29,6 @@ const ( | |||||||
| 	unixProtocol = "unix" | 	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 | // LocalEndpoint returns the full path to a unix socket at the given endpoint | ||||||
| func LocalEndpoint(path, file string) (string, error) { | func LocalEndpoint(path, file string) (string, error) { | ||||||
| 	u := url.URL{ | 	u := url.URL{ | ||||||
|   | |||||||
| @@ -25,98 +25,6 @@ import ( | |||||||
| 	"github.com/stretchr/testify/assert" | 	"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) { | func TestLocalEndpoint(t *testing.T) { | ||||||
| 	tests := []struct { | 	tests := []struct { | ||||||
| 		path             string | 		path             string | ||||||
|   | |||||||
| @@ -20,22 +20,10 @@ limitations under the License. | |||||||
| package util | package util | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"context" |  | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"net" |  | ||||||
| 	"time" | 	"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 | // LockAndCheckSubPath empty implementation | ||||||
| func LockAndCheckSubPath(volumePath, subPath string) ([]uintptr, error) { | func LockAndCheckSubPath(volumePath, subPath string) ([]uintptr, error) { | ||||||
| 	return []uintptr{}, nil | 	return []uintptr{}, nil | ||||||
|   | |||||||
| @@ -20,95 +20,14 @@ limitations under the License. | |||||||
| package util | package util | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"context" |  | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"net" |  | ||||||
| 	"net/url" |  | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"syscall" | 	"syscall" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/Microsoft/go-winio" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| const ( | const npipeProtocol = "npipe" | ||||||
| 	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) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // LocalEndpoint returns the full path to a named pipe at the given endpoint - unlike on unix, we can't use sockets. | // 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) { | func LocalEndpoint(path, file string) (string, error) { | ||||||
|   | |||||||
| @@ -20,162 +20,19 @@ limitations under the License. | |||||||
| package util | package util | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"context" | ||||||
|  | 	"net" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"runtime" | 	"runtime" | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
|  | 	"github.com/Microsoft/go-winio" | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
| 	"github.com/stretchr/testify/require" | 	"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) { | func TestNormalizePath(t *testing.T) { | ||||||
| 	tests := []struct { | 	tests := []struct { | ||||||
| 		originalpath   string | 		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) { | func TestLocalEndpointRoundTrip(t *testing.T) { | ||||||
| 	npipeDialPointer := reflect.ValueOf(npipeDial).Pointer() | 	npipeDialPointer := reflect.ValueOf(npipeDial).Pointer() | ||||||
| 	expectedDialerName := runtime.FuncForPC(npipeDialPointer).Name() | 	expectedDialerName := runtime.FuncForPC(npipeDialPointer).Name() | ||||||
| @@ -249,7 +110,7 @@ func TestLocalEndpointRoundTrip(t *testing.T) { | |||||||
| 	fullPath, err := LocalEndpoint(`pod-resources`, "kubelet") | 	fullPath, err := LocalEndpoint(`pod-resources`, "kubelet") | ||||||
| 	require.NoErrorf(t, err, "Failed to create the local endpoint path") | 	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) | 	require.NoErrorf(t, err, "Failed to parse the endpoint path and get back address and dialer (path=%q)", fullPath) | ||||||
|  |  | ||||||
| 	dialerPointer := reflect.ValueOf(dialer).Pointer() | 	dialerPointer := reflect.ValueOf(dialer).Pointer() | ||||||
|   | |||||||
| @@ -21,8 +21,8 @@ import ( | |||||||
| 	"errors" | 	"errors" | ||||||
|  |  | ||||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||||
|  | 	remote "k8s.io/cri-client/pkg" | ||||||
| 	"k8s.io/kubernetes/pkg/features" | 	"k8s.io/kubernetes/pkg/features" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/cri/remote" |  | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/util/ioutils" | 	"k8s.io/kubernetes/pkg/kubelet/util/ioutils" | ||||||
| 	"k8s.io/kubernetes/pkg/probe" | 	"k8s.io/kubernetes/pkg/probe" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -24,8 +24,8 @@ import ( | |||||||
|  |  | ||||||
| 	utilfeature "k8s.io/apiserver/pkg/util/feature" | 	utilfeature "k8s.io/apiserver/pkg/util/feature" | ||||||
| 	featuregatetesting "k8s.io/component-base/featuregate/testing" | 	featuregatetesting "k8s.io/component-base/featuregate/testing" | ||||||
|  | 	remote "k8s.io/cri-client/pkg" | ||||||
| 	"k8s.io/kubernetes/pkg/features" | 	"k8s.io/kubernetes/pkg/features" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/cri/remote" |  | ||||||
| 	"k8s.io/kubernetes/pkg/probe" | 	"k8s.io/kubernetes/pkg/probe" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -303,6 +303,12 @@ | |||||||
|   - k8s.io/klog |   - k8s.io/klog | ||||||
|   - k8s.io/utils |   - k8s.io/utils | ||||||
|  |  | ||||||
| # TODO: enable when source code got transferred | - baseImportPath: "./staging/src/k8s.io/cri-client" | ||||||
| # - baseImportPath: "./staging/src/k8s.io/cri-client" |   allowedImports: | ||||||
| #   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 | ||||||
|   | |||||||
| @@ -1497,6 +1497,17 @@ rules: | |||||||
|       branch: master |       branch: master | ||||||
|       dirs: |       dirs: | ||||||
|       - staging/src/k8s.io/cri-client |       - 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 |   library: true | ||||||
| - destination: kubelet | - destination: kubelet | ||||||
|   branches: |   branches: | ||||||
|   | |||||||
| @@ -4,4 +4,64 @@ module k8s.io/cri-client | |||||||
|  |  | ||||||
| go 1.22.0 | 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 | ||||||
|  | ) | ||||||
|   | |||||||
							
								
								
									
										205
									
								
								staging/src/k8s.io/cri-client/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										205
									
								
								staging/src/k8s.io/cri-client/go.sum
									
									
									
										generated
									
									
									
								
							| @@ -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= | ||||||
|   | |||||||
| @@ -16,4 +16,4 @@ limitations under the License. | |||||||
| 
 | 
 | ||||||
| // Package remote contains gRPC implementation of internalapi.RuntimeService | // Package remote contains gRPC implementation of internalapi.RuntimeService | ||||||
| // and internalapi.ImageManagerService. | // and internalapi.ImageManagerService. | ||||||
| package remote | package cri | ||||||
| @@ -24,7 +24,7 @@ import ( | |||||||
| 	"google.golang.org/grpc" | 	"google.golang.org/grpc" | ||||||
| 	kubeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	kubeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
| 	apitest "k8s.io/cri-api/pkg/apis/testing" | 	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" | 	utilexec "k8s.io/utils/exec" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and | |||||||
| limitations under the License. | limitations under the License. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| package remote | package cri | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -30,11 +30,11 @@ import ( | |||||||
| 	"google.golang.org/grpc/credentials/insecure" | 	"google.golang.org/grpc/credentials/insecure" | ||||||
| 	"google.golang.org/grpc/status" | 	"google.golang.org/grpc/status" | ||||||
| 	tracing "k8s.io/component-base/tracing" | 	tracing "k8s.io/component-base/tracing" | ||||||
|  | 	"k8s.io/cri-client/pkg/util" | ||||||
| 	"k8s.io/klog/v2" | 	"k8s.io/klog/v2" | ||||||
| 
 | 
 | ||||||
| 	internalapi "k8s.io/cri-api/pkg/apis" | 	internalapi "k8s.io/cri-api/pkg/apis" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/util" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // remoteImageService is a gRPC implementation of internalapi.ImageManagerService. | // remoteImageService is a gRPC implementation of internalapi.ImageManagerService. | ||||||
| @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and | |||||||
| limitations under the License. | limitations under the License. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| package remote | package cri | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -29,8 +29,8 @@ import ( | |||||||
| 	"go.opentelemetry.io/otel/trace/noop" | 	"go.opentelemetry.io/otel/trace/noop" | ||||||
| 	internalapi "k8s.io/cri-api/pkg/apis" | 	internalapi "k8s.io/cri-api/pkg/apis" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
|  | 	"k8s.io/cri-client/pkg/util" | ||||||
| 	"k8s.io/klog/v2" | 	"k8s.io/klog/v2" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/util" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func createRemoteImageServiceWithTracerProvider(endpoint string, tp oteltrace.TracerProvider, t *testing.T) internalapi.ImageManagerService { | func createRemoteImageServiceWithTracerProvider(endpoint string, tp oteltrace.TracerProvider, t *testing.T) internalapi.ImageManagerService { | ||||||
| @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and | |||||||
| limitations under the License. | limitations under the License. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| package remote | package cri | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -35,8 +35,8 @@ import ( | |||||||
| 	tracing "k8s.io/component-base/tracing" | 	tracing "k8s.io/component-base/tracing" | ||||||
| 	internalapi "k8s.io/cri-api/pkg/apis" | 	internalapi "k8s.io/cri-api/pkg/apis" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
|  | 	"k8s.io/cri-client/pkg/util" | ||||||
| 	"k8s.io/klog/v2" | 	"k8s.io/klog/v2" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/util" |  | ||||||
| 
 | 
 | ||||||
| 	utilexec "k8s.io/utils/exec" | 	utilexec "k8s.io/utils/exec" | ||||||
| ) | ) | ||||||
| @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and | |||||||
| limitations under the License. | limitations under the License. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| package remote | package cri | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -31,14 +31,12 @@ import ( | |||||||
| 	"github.com/stretchr/testify/require" | 	"github.com/stretchr/testify/require" | ||||||
| 	internalapi "k8s.io/cri-api/pkg/apis" | 	internalapi "k8s.io/cri-api/pkg/apis" | ||||||
| 	apitest "k8s.io/cri-api/pkg/apis/testing" | 	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" | 	"k8s.io/klog/v2" | ||||||
| 	fakeremote "k8s.io/kubernetes/pkg/kubelet/cri/remote/fake" |  | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/util" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const defaultConnectionTimeout = 15 * time.Second | ||||||
| 	defaultConnectionTimeout = 15 * time.Second |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| // createAndStartFakeRemoteRuntime creates and starts fakeremote.RemoteRuntime. | // createAndStartFakeRemoteRuntime creates and starts fakeremote.RemoteRuntime. | ||||||
| // It returns the RemoteRuntime, endpoint on success. | // It returns the RemoteRuntime, endpoint on success. | ||||||
							
								
								
									
										124
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_unix.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_unix.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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) | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										118
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_unix_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_unix_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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) | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_unsupported.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_unsupported.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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") | ||||||
|  | } | ||||||
							
								
								
									
										108
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_windows.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_windows.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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) | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										176
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_windows_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								staging/src/k8s.io/cri-client/pkg/util/util_windows_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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) | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and | |||||||
| limitations under the License. | limitations under the License. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| package remote | package cri | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| @@ -14,13 +14,14 @@ See the License for the specific language governing permissions and | |||||||
| limitations under the License. | limitations under the License. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| package remote | package cri | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
| 	"testing" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func makePodSandboxMetadata(name, namespace, uid string) *runtimeapi.PodSandboxMetadata { | func makePodSandboxMetadata(name, namespace, uid string) *runtimeapi.PodSandboxMetadata { | ||||||
| @@ -47,6 +47,7 @@ import ( | |||||||
| 	"k8s.io/component-base/featuregate" | 	"k8s.io/component-base/featuregate" | ||||||
| 	internalapi "k8s.io/cri-api/pkg/apis" | 	internalapi "k8s.io/cri-api/pkg/apis" | ||||||
| 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | 	runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||||
|  | 	remote "k8s.io/cri-client/pkg" | ||||||
| 	"k8s.io/klog/v2" | 	"k8s.io/klog/v2" | ||||||
| 	kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1" | 	kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1" | ||||||
| 	kubeletpodresourcesv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" | 	kubeletpodresourcesv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" | ||||||
| @@ -56,7 +57,6 @@ import ( | |||||||
| 	kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" | 	kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/apis/podresources" | 	"k8s.io/kubernetes/pkg/kubelet/apis/podresources" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/cm" | 	"k8s.io/kubernetes/pkg/kubelet/cm" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/cri/remote" |  | ||||||
| 	kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics" | 	kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics" | ||||||
| 	"k8s.io/kubernetes/pkg/kubelet/util" | 	"k8s.io/kubernetes/pkg/kubelet/util" | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							| @@ -1105,6 +1105,8 @@ gopkg.in/yaml.v3 | |||||||
| ## explicit; go 1.22.0 | ## explicit; go 1.22.0 | ||||||
| # k8s.io/cri-api v0.0.0 => ./staging/src/k8s.io/cri-api | # k8s.io/cri-api v0.0.0 => ./staging/src/k8s.io/cri-api | ||||||
| ## explicit; go 1.22.0 | ## 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 | # k8s.io/csi-translation-lib v0.0.0 => ./staging/src/k8s.io/csi-translation-lib | ||||||
| ## explicit; go 1.22.0 | ## explicit; go 1.22.0 | ||||||
| # k8s.io/dynamic-resource-allocation v0.0.0 => ./staging/src/k8s.io/dynamic-resource-allocation | # k8s.io/dynamic-resource-allocation v0.0.0 => ./staging/src/k8s.io/dynamic-resource-allocation | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sascha Grunert
					Sascha Grunert