From 94fb0b1c11ac9ea47ae1db6e2cdf76174d194edc Mon Sep 17 00:00:00 2001 From: Krisztian Litkey Date: Fri, 5 Jan 2024 15:01:47 +0200 Subject: [PATCH 1/3] pkg/cri: remove support for CRI v1alpha2. Ditch support (and protocol conversion) for the obsolete v1alpha2 version of the CRI protocol. Implement the missing v1 RuntimeService client and server interfaces. Implement relaying for these same interfaces with the exception of the GetContainerEvents/PLEG interface Signed-off-by: Krisztian Litkey --- pkg/cri/client/client.go | 20 +- pkg/cri/client/v1/client.go | 17 +- pkg/cri/client/v1alpha2/client.go | 905 ------------------------ pkg/cri/relay/runtime-service.go | 15 + pkg/cri/server/server.go | 5 - pkg/cri/server/services.go | 42 ++ pkg/cri/server/v1alpha2/server.go | 747 ------------------- test/functional/fake_cri_server_test.go | 15 + 8 files changed, 91 insertions(+), 1675 deletions(-) delete mode 100644 pkg/cri/client/v1alpha2/client.go delete mode 100644 pkg/cri/server/v1alpha2/server.go diff --git a/pkg/cri/client/client.go b/pkg/cri/client/client.go index 798465dba..5969a1447 100644 --- a/pkg/cri/client/client.go +++ b/pkg/cri/client/client.go @@ -32,7 +32,6 @@ import ( "github.com/intel/cri-resource-manager/pkg/utils" v1 "github.com/intel/cri-resource-manager/pkg/cri/client/v1" - v1alpha2 "github.com/intel/cri-resource-manager/pkg/cri/client/v1alpha2" ) // DialNotifyFn is a function to call after a successful net.Dial[Timeout](). @@ -128,9 +127,6 @@ func (c *client) Connect(options ConnectOptions) error { } client, err := v1.Connect(c.rcc, c.icc) - if err != nil { - client, err = v1alpha2.Connect(c.rcc, c.icc) - } if err != nil { return err } @@ -446,23 +442,25 @@ func (c *client) Status(ctx context.Context, in *criv1.StatusRequest, _ ...grpc. return c.client.Status(ctx, in) } -/* func (c *client) CheckpointContainer(ctx context.Context, in *criv1.CheckpointContainerRequest, _ ...grpc.CallOption) (*criv1.CheckpointContainerResponse, error) { - return nil, fmt.Errorf("unimplemented by CRI RuntimeService") + return c.client.CheckpointContainer(ctx, in) } -func (c *client) GetContainerEvents(ctx context.Context, in *criv1.GetContainerEventsRequest, _ ...grpc.CallOption) (criv1.RuntimeService_GetContainerEventsClient, error) { - return nil, fmt.Errorf("unimplemented by CRI RuntimeService") +func (c *client) GetContainerEvents(ctx context.Context, in *criv1.GetEventsRequest, _ ...grpc.CallOption) (criv1.RuntimeService_GetContainerEventsClient, error) { + return c.client.GetContainerEvents(ctx, in) } func (c *client) ListMetricDescriptors(ctx context.Context, in *criv1.ListMetricDescriptorsRequest, _ ...grpc.CallOption) (*criv1.ListMetricDescriptorsResponse, error) { - return nil, fmt.Errorf("unimplemented by CRI RuntimeService") + return c.client.ListMetricDescriptors(ctx, in) } func (c *client) ListPodSandboxMetrics(ctx context.Context, in *criv1.ListPodSandboxMetricsRequest, _ ...grpc.CallOption) (*criv1.ListPodSandboxMetricsResponse, error) { - return nil, fmt.Errorf("unimplemented by CRI RuntimeService") + return c.client.ListPodSandboxMetrics(ctx, in) +} + +func (c *client) RuntimeConfig(ctx context.Context, in *criv1.RuntimeConfigRequest, _ ...grpc.CallOption) (*criv1.RuntimeConfigResponse, error) { + return c.client.RuntimeConfig(ctx, in) } -*/ func (c *client) ListImages(ctx context.Context, in *criv1.ListImagesRequest, _ ...grpc.CallOption) (*criv1.ListImagesResponse, error) { if err := c.checkImageService(); err != nil { diff --git a/pkg/cri/client/v1/client.go b/pkg/cri/client/v1/client.go index c1132e964..dc743a9e4 100644 --- a/pkg/cri/client/v1/client.go +++ b/pkg/cri/client/v1/client.go @@ -69,14 +69,14 @@ func Connect(runtime, image *grpc.ClientConn) (Client, error) { func (c *client) checkRuntimeService() error { if c.rcc == nil { - return fmt.Errorf("no CRI v1alpha2 RuntimeService client") + return fmt.Errorf("no CRI v1 RuntimeService client") } return nil } func (c *client) checkImageService() error { if c.icc == nil { - return fmt.Errorf("no CRI v1alpha2 ImageService client") + return fmt.Errorf("no CRI v1 ImageService client") } return nil } @@ -294,10 +294,6 @@ func (c *client) GetContainerEvents(ctx context.Context, in *criv1.GetEventsRequ return eventsClient, err } -// -// These are being introduced but they are not defined yet for the -// CRI API version we are compiling against. -/* func (c *client) ListMetricDescriptors(ctx context.Context, in *criv1.ListMetricDescriptorsRequest, _ ...grpc.CallOption) (*criv1.ListMetricDescriptorsResponse, error) { if err := c.checkRuntimeService(); err != nil { return nil, err @@ -313,7 +309,14 @@ func (c *client) ListPodSandboxMetrics(ctx context.Context, in *criv1.ListPodSan return c.rsc.ListPodSandboxMetrics(ctx, in) } -*/ + +func (c *client) RuntimeConfig(ctx context.Context, in *criv1.RuntimeConfigRequest, _ ...grpc.CallOption) (*criv1.RuntimeConfigResponse, error) { + if err := c.checkRuntimeService(); err != nil { + return nil, err + } + + return c.rsc.RuntimeConfig(ctx, in) +} func (c *client) ListImages(ctx context.Context, in *criv1.ListImagesRequest, _ ...grpc.CallOption) (*criv1.ListImagesResponse, error) { if err := c.checkImageService(); err != nil { diff --git a/pkg/cri/client/v1alpha2/client.go b/pkg/cri/client/v1alpha2/client.go deleted file mode 100644 index f9b260750..000000000 --- a/pkg/cri/client/v1alpha2/client.go +++ /dev/null @@ -1,905 +0,0 @@ -// Copyright Intel Corporation. All Rights Reserved. -// -// 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 v1alpha2 - -import ( - "context" - "fmt" - - "google.golang.org/grpc" - - criv1 "k8s.io/cri-api/pkg/apis/runtime/v1" - criv1alpha2 "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" - - logger "github.com/intel/cri-resource-manager/pkg/log" -) - -type Client interface { - criv1.ImageServiceClient - criv1.RuntimeServiceClient -} - -type client struct { - logger.Logger - isc criv1alpha2.ImageServiceClient - rsc criv1alpha2.RuntimeServiceClient - rcc *grpc.ClientConn - icc *grpc.ClientConn -} - -// Connect v2alpha1 RuntimeService and ImageService clients. -func Connect(runtime, image *grpc.ClientConn) (Client, error) { - c := &client{ - Logger: logger.Get("cri/client"), - rcc: runtime, - icc: image, - } - - if c.rcc != nil { - c.Info("probing CRI v1alpha2 RuntimeService client...") - c.rsc = criv1alpha2.NewRuntimeServiceClient(c.rcc) - _, err := c.rsc.Version(context.Background(), &criv1alpha2.VersionRequest{}) - if err != nil { - return nil, err - } - } - - if c.icc != nil { - c.Info("probing CRI v1alpha2 ImageService client...") - c.isc = criv1alpha2.NewImageServiceClient(c.icc) - _, err := c.isc.ListImages(context.Background(), &criv1alpha2.ListImagesRequest{}) - if err != nil { - return nil, err - } - } - - return c, nil -} - -func (c *client) checkRuntimeService() error { - if c.rcc == nil { - return fmt.Errorf("no CRI v1alpha2 RuntimeService client") - } - return nil -} - -func (c *client) checkImageService() error { - if c.icc == nil { - return fmt.Errorf("no CRI v1alpha2 ImageService client") - } - return nil -} - -func (c *client) Version(ctx context.Context, in *criv1.VersionRequest, _ ...grpc.CallOption) (*criv1.VersionResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.VersionRequest{} - v1resp = &criv1.VersionResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.Version(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) RunPodSandbox(ctx context.Context, in *criv1.RunPodSandboxRequest, _ ...grpc.CallOption) (*criv1.RunPodSandboxResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.RunPodSandboxRequest{} - v1resp = &criv1.RunPodSandboxResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.RunPodSandbox(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) StopPodSandbox(ctx context.Context, in *criv1.StopPodSandboxRequest, _ ...grpc.CallOption) (*criv1.StopPodSandboxResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.StopPodSandboxRequest{} - v1resp = &criv1.StopPodSandboxResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.StopPodSandbox(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) RemovePodSandbox(ctx context.Context, in *criv1.RemovePodSandboxRequest, _ ...grpc.CallOption) (*criv1.RemovePodSandboxResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.RemovePodSandboxRequest{} - v1resp = &criv1.RemovePodSandboxResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.RemovePodSandbox(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) PodSandboxStatus(ctx context.Context, in *criv1.PodSandboxStatusRequest, _ ...grpc.CallOption) (*criv1.PodSandboxStatusResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.PodSandboxStatusRequest{} - v1resp = &criv1.PodSandboxStatusResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.PodSandboxStatus(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ListPodSandbox(ctx context.Context, in *criv1.ListPodSandboxRequest, _ ...grpc.CallOption) (*criv1.ListPodSandboxResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ListPodSandboxRequest{} - v1resp = &criv1.ListPodSandboxResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.ListPodSandbox(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) CreateContainer(ctx context.Context, in *criv1.CreateContainerRequest, _ ...grpc.CallOption) (*criv1.CreateContainerResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.CreateContainerRequest{} - v1resp = &criv1.CreateContainerResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.CreateContainer(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) StartContainer(ctx context.Context, in *criv1.StartContainerRequest, _ ...grpc.CallOption) (*criv1.StartContainerResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.StartContainerRequest{} - v1resp = &criv1.StartContainerResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.StartContainer(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) StopContainer(ctx context.Context, in *criv1.StopContainerRequest, _ ...grpc.CallOption) (*criv1.StopContainerResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.StopContainerRequest{} - v1resp = &criv1.StopContainerResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.StopContainer(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) RemoveContainer(ctx context.Context, in *criv1.RemoveContainerRequest, _ ...grpc.CallOption) (*criv1.RemoveContainerResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.RemoveContainerRequest{} - v1resp = &criv1.RemoveContainerResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.RemoveContainer(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ListContainers(ctx context.Context, in *criv1.ListContainersRequest, _ ...grpc.CallOption) (*criv1.ListContainersResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ListContainersRequest{} - v1resp = &criv1.ListContainersResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.ListContainers(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ContainerStatus(ctx context.Context, in *criv1.ContainerStatusRequest, _ ...grpc.CallOption) (*criv1.ContainerStatusResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ContainerStatusRequest{} - v1resp = &criv1.ContainerStatusResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.ContainerStatus(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) UpdateContainerResources(ctx context.Context, in *criv1.UpdateContainerResourcesRequest, _ ...grpc.CallOption) (*criv1.UpdateContainerResourcesResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.UpdateContainerResourcesRequest{} - v1resp = &criv1.UpdateContainerResourcesResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.UpdateContainerResources(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ReopenContainerLog(ctx context.Context, in *criv1.ReopenContainerLogRequest, _ ...grpc.CallOption) (*criv1.ReopenContainerLogResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ReopenContainerLogRequest{} - v1resp = &criv1.ReopenContainerLogResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.ReopenContainerLog(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ExecSync(ctx context.Context, in *criv1.ExecSyncRequest, _ ...grpc.CallOption) (*criv1.ExecSyncResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ExecSyncRequest{} - v1resp = &criv1.ExecSyncResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.ExecSync(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) Exec(ctx context.Context, in *criv1.ExecRequest, _ ...grpc.CallOption) (*criv1.ExecResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ExecRequest{} - v1resp = &criv1.ExecResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.Exec(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) Attach(ctx context.Context, in *criv1.AttachRequest, _ ...grpc.CallOption) (*criv1.AttachResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.AttachRequest{} - v1resp = &criv1.AttachResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.Attach(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) PortForward(ctx context.Context, in *criv1.PortForwardRequest, _ ...grpc.CallOption) (*criv1.PortForwardResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.PortForwardRequest{} - v1resp = &criv1.PortForwardResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.PortForward(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ContainerStats(ctx context.Context, in *criv1.ContainerStatsRequest, _ ...grpc.CallOption) (*criv1.ContainerStatsResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ContainerStatsRequest{} - v1resp = &criv1.ContainerStatsResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.ContainerStats(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ListContainerStats(ctx context.Context, in *criv1.ListContainerStatsRequest, _ ...grpc.CallOption) (*criv1.ListContainerStatsResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ListContainerStatsRequest{} - v1resp = &criv1.ListContainerStatsResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.ListContainerStats(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) PodSandboxStats(ctx context.Context, in *criv1.PodSandboxStatsRequest, _ ...grpc.CallOption) (*criv1.PodSandboxStatsResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.PodSandboxStatsRequest{} - v1resp = &criv1.PodSandboxStatsResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.PodSandboxStats(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ListPodSandboxStats(ctx context.Context, in *criv1.ListPodSandboxStatsRequest, _ ...grpc.CallOption) (*criv1.ListPodSandboxStatsResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ListPodSandboxStatsRequest{} - v1resp = &criv1.ListPodSandboxStatsResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.ListPodSandboxStats(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) UpdateRuntimeConfig(ctx context.Context, in *criv1.UpdateRuntimeConfigRequest, _ ...grpc.CallOption) (*criv1.UpdateRuntimeConfigResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.UpdateRuntimeConfigRequest{} - v1resp = &criv1.UpdateRuntimeConfigResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.UpdateRuntimeConfig(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) Status(ctx context.Context, in *criv1.StatusRequest, _ ...grpc.CallOption) (*criv1.StatusResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.StatusRequest{} - v1resp = &criv1.StatusResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.rsc.Status(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) CheckpointContainer(_ context.Context, _ *criv1.CheckpointContainerRequest, _ ...grpc.CallOption) (*criv1.CheckpointContainerResponse, error) { - c.Errorf("internal error: GetContainerEvents() called for v1alpha2 client") - return &criv1.CheckpointContainerResponse{}, - fmt.Errorf("internal error: CheckpointContainer() called for v1alpha2 client") -} - -func (c *client) GetContainerEvents(_ context.Context, _ *criv1.GetEventsRequest, _ ...grpc.CallOption) (criv1.RuntimeService_GetContainerEventsClient, error) { - c.Errorf("internal error: GetContainerEvents() called for v1alpha2 client") - return nil, fmt.Errorf("internal error: GetContainerEvents() called for v1alpha2 client") -} - -// -// These are being introduced but they are not defined yet for the -// CRI API version we are compiling against. -/* -func (c *client) ListMetricDescriptors(ctx context.Context, in *criv1.ListMetricDescriptorsRequest, _ ...grpc.CallOption) (*criv1.ListMetricDescriptorsResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - return c.rsc.ListMetricDescriptors(ctx, in) -} - -func (c *client) ListPodSandboxMetrics(ctx context.Context, in *criv1.ListPodSandboxMetricsRequest, _ ...grpc.CallOption) (*criv1.ListPodSandboxMetricsResponse, error) { - if err := c.checkRuntimeService(); err != nil { - return nil, err - } - - return c.rsc.ListPodSandboxMetrics(ctx, in) -} -*/ - -func (c *client) ListImages(ctx context.Context, in *criv1.ListImagesRequest, _ ...grpc.CallOption) (*criv1.ListImagesResponse, error) { - if err := c.checkImageService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ListImagesRequest{} - v1resp = &criv1.ListImagesResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.isc.ListImages(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ImageStatus(ctx context.Context, in *criv1.ImageStatusRequest, _ ...grpc.CallOption) (*criv1.ImageStatusResponse, error) { - if err := c.checkImageService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ImageStatusRequest{} - v1resp = &criv1.ImageStatusResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.isc.ImageStatus(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) PullImage(ctx context.Context, in *criv1.PullImageRequest, _ ...grpc.CallOption) (*criv1.PullImageResponse, error) { - if err := c.checkImageService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.PullImageRequest{} - v1resp = &criv1.PullImageResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.isc.PullImage(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) RemoveImage(ctx context.Context, in *criv1.RemoveImageRequest, _ ...grpc.CallOption) (*criv1.RemoveImageResponse, error) { - if err := c.checkImageService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.RemoveImageRequest{} - v1resp = &criv1.RemoveImageResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.isc.RemoveImage(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil -} - -func (c *client) ImageFsInfo(ctx context.Context, in *criv1.ImageFsInfoRequest, _ ...grpc.CallOption) (*criv1.ImageFsInfoResponse, error) { - if err := c.checkImageService(); err != nil { - return nil, err - } - - var ( - req = &criv1alpha2.ImageFsInfoRequest{} - v1resp = &criv1.ImageFsInfoResponse{} - ) - - if err := v1ReqToAlpha(in, req); err != nil { - return nil, err - } - - resp, err := c.isc.ImageFsInfo(ctx, req) - if err != nil { - return nil, err - } - - if err := alphaRespToV1(resp, v1resp); err != nil { - return nil, err - } - - return v1resp, nil - -} - -func v1ReqToAlpha( - v1req interface{ Marshal() ([]byte, error) }, - alpha interface{ Unmarshal(_ []byte) error }, -) error { - p, err := v1req.Marshal() - if err != nil { - return err - } - - if err = alpha.Unmarshal(p); err != nil { - return err - } - return nil -} - -func alphaRespToV1( - alpha interface{ Marshal() ([]byte, error) }, - v1res interface{ Unmarshal(_ []byte) error }, -) error { - p, err := alpha.Marshal() - if err != nil { - return err - } - - if err = v1res.Unmarshal(p); err != nil { - return err - } - return nil -} - -// Return a formatted client-specific error. -func clientError(format string, args ...interface{}) error { - return fmt.Errorf("cri/client: "+format, args...) -} diff --git a/pkg/cri/relay/runtime-service.go b/pkg/cri/relay/runtime-service.go index b712692a4..e24fe905a 100644 --- a/pkg/cri/relay/runtime-service.go +++ b/pkg/cri/relay/runtime-service.go @@ -191,3 +191,18 @@ func (r *relay) CheckpointContainer(ctx context.Context, req *criv1.CheckpointCo func (r *relay) GetContainerEvents(_ *criv1.GetEventsRequest, _ criv1.RuntimeService_GetContainerEventsServer) error { return status.Errorf(codes.Unimplemented, "method GetContainerEvents not implemented") } + +func (r *relay) ListMetricDescriptors(ctx context.Context, req *criv1.ListMetricDescriptorsRequest) (*criv1.ListMetricDescriptorsResponse, error) { + r.dump("ListMetricDescriptors", req) + return r.client.ListMetricDescriptors(ctx, req) +} + +func (r *relay) ListPodSandboxMetrics(ctx context.Context, req *criv1.ListPodSandboxMetricsRequest) (*criv1.ListPodSandboxMetricsResponse, error) { + r.dump("ListPodSandboxMetrics", req) + return r.client.ListPodSandboxMetrics(ctx, req) +} + +func (r *relay) RuntimeConfig(ctx context.Context, req *criv1.RuntimeConfigRequest) (*criv1.RuntimeConfigResponse, error) { + r.dump("RuntimeConfig", req) + return r.client.RuntimeConfig(ctx, req) +} diff --git a/pkg/cri/server/server.go b/pkg/cri/server/server.go index 0fe8719ff..bf497d6b8 100644 --- a/pkg/cri/server/server.go +++ b/pkg/cri/server/server.go @@ -27,7 +27,6 @@ import ( "google.golang.org/grpc" - v1alpha2 "github.com/intel/cri-resource-manager/pkg/cri/server/v1alpha2" criv1 "k8s.io/cri-api/pkg/apis/runtime/v1" "github.com/intel/cri-resource-manager/pkg/cri/resource-manager/sockets" @@ -86,7 +85,6 @@ type server struct { interceptors map[string]Interceptor // request intercepting hooks runtime *criv1.RuntimeServiceServer // CRI runtime service image *criv1.ImageServiceServer // CRI image service - v1alpha2 *v1alpha2.Server // CRI v1alpha2 bridging service } // NewServer creates a new server instance. @@ -117,7 +115,6 @@ func (s *server) RegisterImageService(service criv1.ImageServiceServer) error { is := service s.image = &is criv1.RegisterImageServiceServer(s.server, s) - s.v1alpha2.RegisterImageService(s) return nil } @@ -135,7 +132,6 @@ func (s *server) RegisterRuntimeService(service criv1.RuntimeServiceServer) erro rs := service s.runtime = &rs criv1.RegisterRuntimeServiceServer(s.server, s) - s.v1alpha2.RegisterRuntimeService(s) return nil } @@ -224,7 +220,6 @@ func (s *server) createGrpcServer() error { } s.server = grpc.NewServer(instrumentation.InjectGrpcServerTrace()...) - s.v1alpha2 = v1alpha2.NewServer(s.server) return nil } diff --git a/pkg/cri/server/services.go b/pkg/cri/server/services.go index 828739ee0..d61d8e442 100644 --- a/pkg/cri/server/services.go +++ b/pkg/cri/server/services.go @@ -61,6 +61,9 @@ const ( updateRuntimeConfig = "UpdateRuntimeConfig" status = "Status" checkpointContainer = "CheckpointContainer" + listMetricDescriptors = "ListMetricDescriptors" + listPodSandboxMetrics = "ListPodSandboxMetrics" + runtimeConfig = "RuntimeConfig" ) func fqmn(service, method string) string { @@ -501,3 +504,42 @@ func (s *server) CheckpointContainer(ctx context.Context, req *criv1.CheckpointC func (s *server) GetContainerEvents(_ *criv1.GetEventsRequest, _ criv1.RuntimeService_GetContainerEventsServer) error { return grpcstatus.Errorf(grpccodes.Unimplemented, "GetContainerEvents not implemented") } + +func (s *server) ListMetricDescriptors(ctx context.Context, req *criv1.ListMetricDescriptorsRequest) (*criv1.ListMetricDescriptorsResponse, error) { + rsp, err := s.interceptRequest(ctx, runtimeService, listMetricDescriptors, req, + func(ctx context.Context, req interface{}) (interface{}, error) { + return (*s.runtime).ListMetricDescriptors(ctx, req.(*criv1.ListMetricDescriptorsRequest)) + }) + + if err != nil { + return nil, err + } + + return rsp.(*criv1.ListMetricDescriptorsResponse), err +} + +func (s *server) ListPodSandboxMetrics(ctx context.Context, req *criv1.ListPodSandboxMetricsRequest) (*criv1.ListPodSandboxMetricsResponse, error) { + rsp, err := s.interceptRequest(ctx, runtimeService, listPodSandboxMetrics, req, + func(ctx context.Context, req interface{}) (interface{}, error) { + return (*s.runtime).ListPodSandboxMetrics(ctx, req.(*criv1.ListPodSandboxMetricsRequest)) + }) + + if err != nil { + return nil, err + } + + return rsp.(*criv1.ListPodSandboxMetricsResponse), err +} + +func (s *server) RuntimeConfig(ctx context.Context, req *criv1.RuntimeConfigRequest) (*criv1.RuntimeConfigResponse, error) { + rsp, err := s.interceptRequest(ctx, runtimeService, runtimeConfig, req, + func(ctx context.Context, req interface{}) (interface{}, error) { + return (*s.runtime).RuntimeConfig(ctx, req.(*criv1.RuntimeConfigRequest)) + }) + + if err != nil { + return nil, err + } + + return rsp.(*criv1.RuntimeConfigResponse), err +} diff --git a/pkg/cri/server/v1alpha2/server.go b/pkg/cri/server/v1alpha2/server.go deleted file mode 100644 index 0353fbc62..000000000 --- a/pkg/cri/server/v1alpha2/server.go +++ /dev/null @@ -1,747 +0,0 @@ -// Copyright 2022 Intel Corporation. All Rights Reserved. -// -// 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 server - -import ( - "context" - - "google.golang.org/grpc" - - criv1 "k8s.io/cri-api/pkg/apis/runtime/v1" - criv1alpha2 "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" -) - -type Server struct { - server *grpc.Server - runtime criv1.RuntimeServiceServer - image criv1.ImageServiceServer -} - -func NewServer(s *grpc.Server) *Server { - return &Server{ - server: s, - } -} - -func (s *Server) RegisterImageService(image criv1.ImageServiceServer) { - if s == nil { - return - } - s.image = image - criv1alpha2.RegisterImageServiceServer(s.server, s) -} - -func (s *Server) RegisterRuntimeService(runtime criv1.RuntimeServiceServer) { - if s == nil { - return - } - s.runtime = runtime - criv1alpha2.RegisterRuntimeServiceServer(s.server, s) -} - -func (s *Server) ListImages(ctx context.Context, - in *criv1alpha2.ListImagesRequest) (*criv1alpha2.ListImagesResponse, error) { - var ( - v1req = &criv1.ListImagesRequest{} - alpharesp = &criv1alpha2.ListImagesResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.image.ListImages(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ImageStatus(ctx context.Context, - in *criv1alpha2.ImageStatusRequest) (*criv1alpha2.ImageStatusResponse, error) { - var ( - v1req = &criv1.ImageStatusRequest{} - alpharesp = &criv1alpha2.ImageStatusResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.image.ImageStatus(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) PullImage(ctx context.Context, - in *criv1alpha2.PullImageRequest) (*criv1alpha2.PullImageResponse, error) { - var ( - v1req = &criv1.PullImageRequest{} - alpharesp = &criv1alpha2.PullImageResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.image.PullImage(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) RemoveImage(ctx context.Context, - in *criv1alpha2.RemoveImageRequest) (*criv1alpha2.RemoveImageResponse, error) { - var ( - v1req = &criv1.RemoveImageRequest{} - alpharesp = &criv1alpha2.RemoveImageResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.image.RemoveImage(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ImageFsInfo(ctx context.Context, - in *criv1alpha2.ImageFsInfoRequest) (*criv1alpha2.ImageFsInfoResponse, error) { - var ( - v1req = &criv1.ImageFsInfoRequest{} - alpharesp = &criv1alpha2.ImageFsInfoResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.image.ImageFsInfo(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) Version(ctx context.Context, - in *criv1alpha2.VersionRequest) (*criv1alpha2.VersionResponse, error) { - var ( - v1req = &criv1.VersionRequest{} - alpharesp = &criv1alpha2.VersionResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.Version(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) RunPodSandbox(ctx context.Context, - in *criv1alpha2.RunPodSandboxRequest) (*criv1alpha2.RunPodSandboxResponse, error) { - var ( - v1req = &criv1.RunPodSandboxRequest{} - alpharesp = &criv1alpha2.RunPodSandboxResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.RunPodSandbox(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) StopPodSandbox(ctx context.Context, - in *criv1alpha2.StopPodSandboxRequest) (*criv1alpha2.StopPodSandboxResponse, error) { - var ( - v1req = &criv1.StopPodSandboxRequest{} - alpharesp = &criv1alpha2.StopPodSandboxResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.StopPodSandbox(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) RemovePodSandbox(ctx context.Context, - in *criv1alpha2.RemovePodSandboxRequest) (*criv1alpha2.RemovePodSandboxResponse, error) { - var ( - v1req = &criv1.RemovePodSandboxRequest{} - alpharesp = &criv1alpha2.RemovePodSandboxResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.RemovePodSandbox(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) PodSandboxStatus(ctx context.Context, - in *criv1alpha2.PodSandboxStatusRequest) (*criv1alpha2.PodSandboxStatusResponse, error) { - var ( - v1req = &criv1.PodSandboxStatusRequest{} - alpharesp = &criv1alpha2.PodSandboxStatusResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.PodSandboxStatus(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ListPodSandbox(ctx context.Context, - in *criv1alpha2.ListPodSandboxRequest) (*criv1alpha2.ListPodSandboxResponse, error) { - var ( - v1req = &criv1.ListPodSandboxRequest{} - alpharesp = &criv1alpha2.ListPodSandboxResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.ListPodSandbox(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) CreateContainer(ctx context.Context, - in *criv1alpha2.CreateContainerRequest) (*criv1alpha2.CreateContainerResponse, error) { - var ( - v1req = &criv1.CreateContainerRequest{} - alpharesp = &criv1alpha2.CreateContainerResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.CreateContainer(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) StartContainer(ctx context.Context, - in *criv1alpha2.StartContainerRequest) (*criv1alpha2.StartContainerResponse, error) { - var ( - v1req = &criv1.StartContainerRequest{} - alpharesp = &criv1alpha2.StartContainerResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.StartContainer(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) StopContainer(ctx context.Context, - in *criv1alpha2.StopContainerRequest) (*criv1alpha2.StopContainerResponse, error) { - var ( - v1req = &criv1.StopContainerRequest{} - alpharesp = &criv1alpha2.StopContainerResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.StopContainer(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) RemoveContainer(ctx context.Context, - in *criv1alpha2.RemoveContainerRequest) (*criv1alpha2.RemoveContainerResponse, error) { - var ( - v1req = &criv1.RemoveContainerRequest{} - alpharesp = &criv1alpha2.RemoveContainerResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.RemoveContainer(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ListContainers(ctx context.Context, - in *criv1alpha2.ListContainersRequest) (*criv1alpha2.ListContainersResponse, error) { - var ( - v1req = &criv1.ListContainersRequest{} - alpharesp = &criv1alpha2.ListContainersResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.ListContainers(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ContainerStatus(ctx context.Context, - in *criv1alpha2.ContainerStatusRequest) (*criv1alpha2.ContainerStatusResponse, error) { - var ( - v1req = &criv1.ContainerStatusRequest{} - alpharesp = &criv1alpha2.ContainerStatusResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.ContainerStatus(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) UpdateContainerResources(ctx context.Context, - in *criv1alpha2.UpdateContainerResourcesRequest) (*criv1alpha2.UpdateContainerResourcesResponse, error) { - var ( - v1req = &criv1.UpdateContainerResourcesRequest{} - alpharesp = &criv1alpha2.UpdateContainerResourcesResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.UpdateContainerResources(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ReopenContainerLog(ctx context.Context, - in *criv1alpha2.ReopenContainerLogRequest) (*criv1alpha2.ReopenContainerLogResponse, error) { - var ( - v1req = &criv1.ReopenContainerLogRequest{} - alpharesp = &criv1alpha2.ReopenContainerLogResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.ReopenContainerLog(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ExecSync(ctx context.Context, - in *criv1alpha2.ExecSyncRequest) (*criv1alpha2.ExecSyncResponse, error) { - var ( - v1req = &criv1.ExecSyncRequest{} - alpharesp = &criv1alpha2.ExecSyncResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.ExecSync(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) Exec(ctx context.Context, - in *criv1alpha2.ExecRequest) (*criv1alpha2.ExecResponse, error) { - var ( - v1req = &criv1.ExecRequest{} - alpharesp = &criv1alpha2.ExecResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.Exec(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) Attach(ctx context.Context, - in *criv1alpha2.AttachRequest) (*criv1alpha2.AttachResponse, error) { - var ( - v1req = &criv1.AttachRequest{} - alpharesp = &criv1alpha2.AttachResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.Attach(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) PortForward(ctx context.Context, - in *criv1alpha2.PortForwardRequest) (*criv1alpha2.PortForwardResponse, error) { - var ( - v1req = &criv1.PortForwardRequest{} - alpharesp = &criv1alpha2.PortForwardResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.PortForward(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ContainerStats(ctx context.Context, - in *criv1alpha2.ContainerStatsRequest) (*criv1alpha2.ContainerStatsResponse, error) { - var ( - v1req = &criv1.ContainerStatsRequest{} - alpharesp = &criv1alpha2.ContainerStatsResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.ContainerStats(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ListContainerStats(ctx context.Context, - in *criv1alpha2.ListContainerStatsRequest) (*criv1alpha2.ListContainerStatsResponse, error) { - var ( - v1req = &criv1.ListContainerStatsRequest{} - alpharesp = &criv1alpha2.ListContainerStatsResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.ListContainerStats(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) PodSandboxStats(ctx context.Context, in *criv1alpha2.PodSandboxStatsRequest) (*criv1alpha2.PodSandboxStatsResponse, error) { - var ( - v1req = &criv1.PodSandboxStatsRequest{} - alpharesp = &criv1alpha2.PodSandboxStatsResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.PodSandboxStats(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) ListPodSandboxStats(ctx context.Context, in *criv1alpha2.ListPodSandboxStatsRequest) (*criv1alpha2.ListPodSandboxStatsResponse, error) { - var ( - v1req = &criv1.ListPodSandboxStatsRequest{} - alpharesp = &criv1alpha2.ListPodSandboxStatsResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.ListPodSandboxStats(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) UpdateRuntimeConfig(ctx context.Context, - in *criv1alpha2.UpdateRuntimeConfigRequest) (*criv1alpha2.UpdateRuntimeConfigResponse, error) { - var ( - v1req = &criv1.UpdateRuntimeConfigRequest{} - alpharesp = &criv1alpha2.UpdateRuntimeConfigResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.UpdateRuntimeConfig(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func (s *Server) Status(ctx context.Context, - in *criv1alpha2.StatusRequest) (*criv1alpha2.StatusResponse, error) { - var ( - v1req = &criv1.StatusRequest{} - alpharesp = &criv1alpha2.StatusResponse{} - ) - - if err := alphaReqToV1(in, v1req); err != nil { - return nil, err - } - - resp, err := s.runtime.Status(ctx, v1req) - if err != nil { - return nil, err - } - - if err := v1RespToAlpha(resp, alpharesp); err != nil { - return nil, err - } - - return alpharesp, nil -} - -func alphaReqToV1( - alpha interface{ Marshal() ([]byte, error) }, - v1req interface{ Unmarshal(_ []byte) error }, -) error { - p, err := alpha.Marshal() - if err != nil { - return err - } - - if err = v1req.Unmarshal(p); err != nil { - return err - } - return nil -} - -func v1RespToAlpha( - v1res interface{ Marshal() ([]byte, error) }, - alpha interface{ Unmarshal(_ []byte) error }, -) error { - p, err := v1res.Marshal() - if err != nil { - return err - } - - if err = alpha.Unmarshal(p); err != nil { - return err - } - return nil -} diff --git a/test/functional/fake_cri_server_test.go b/test/functional/fake_cri_server_test.go index 43756a1c8..0472f4a78 100644 --- a/test/functional/fake_cri_server_test.go +++ b/test/functional/fake_cri_server_test.go @@ -277,6 +277,21 @@ func (s *fakeCriServer) GetContainerEvents(_ *criv1.GetEventsRequest, _ criv1.Ru return nil } +func (s *fakeCriServer) ListMetricDescriptors(ctx context.Context, req *criv1.ListMetricDescriptorsRequest) (*criv1.ListMetricDescriptorsResponse, error) { + response, err := s.callHandler(ctx, req, nil) + return response.(*criv1.ListMetricDescriptorsResponse), err +} + +func (s *fakeCriServer) ListPodSandboxMetrics(ctx context.Context, req *criv1.ListPodSandboxMetricsRequest) (*criv1.ListPodSandboxMetricsResponse, error) { + response, err := s.callHandler(ctx, req, nil) + return response.(*criv1.ListPodSandboxMetricsResponse), err +} + +func (s *fakeCriServer) RuntimeConfig(ctx context.Context, req *criv1.RuntimeConfigRequest) (*criv1.RuntimeConfigResponse, error) { + response, err := s.callHandler(ctx, req, nil) + return response.(*criv1.RuntimeConfigResponse), err +} + // Implementation of criv1.ImageServiceServer func (s *fakeCriServer) ListImages(ctx context.Context, req *criv1.ListImagesRequest) (*criv1.ListImagesResponse, error) { From 3ffff03d5c67582b2b028714ff263b95b703ac78 Mon Sep 17 00:00:00 2001 From: Krisztian Litkey Date: Fri, 5 Jan 2024 15:24:50 +0200 Subject: [PATCH 2/3] go.{mod,sum}: update CRI deps to release 1.29/v0.29.0. Signed-off-by: Krisztian Litkey --- go.mod | 4 ++-- go.sum | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 30d406b0b..a7cae18a7 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( k8s.io/api v0.29.0 k8s.io/apimachinery v0.29.0 k8s.io/client-go v0.29.0 - k8s.io/cri-api v0.25.16 + k8s.io/cri-api v0.29.0 k8s.io/klog/v2 v2.110.1 k8s.io/utils v0.0.0-20240102154912-e7106e64919e sigs.k8s.io/yaml v1.4.0 @@ -98,5 +98,5 @@ replace ( k8s.io/apiserver => k8s.io/apiserver v0.29.0 k8s.io/client-go => k8s.io/client-go v0.29.0 k8s.io/component-base => k8s.io/component-base v0.29.0 - k8s.io/cri-api => k8s.io/cri-api v0.25.16 + k8s.io/cri-api => k8s.io/cri-api v0.29.0 ) diff --git a/go.sum b/go.sum index 7c66b6598..c48615c8a 100644 --- a/go.sum +++ b/go.sum @@ -637,8 +637,8 @@ k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o= k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis= k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8= k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38= -k8s.io/cri-api v0.25.16 h1:NSa4jRRP8zvEKBVfnWvMEaemvAsMXw5UQkLPQCRa2cc= -k8s.io/cri-api v0.25.16/go.mod h1:0vfZsZhEs3LoY5Lqm6Zgx43M633ToNlTUtEQc+VvXhw= +k8s.io/cri-api v0.29.0 h1:atenAqOltRsFqcCQlFFpDnl/R4aGfOELoNLTDJfd7t8= +k8s.io/cri-api v0.29.0/go.mod h1:Rls2JoVwfC7kW3tndm7267kriuRukQ02qfht0PCRuIc= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= From 30e1c64ba147ca9e4286aa7d45f24444df653cc4 Mon Sep 17 00:00:00 2001 From: Krisztian Litkey Date: Fri, 5 Jan 2024 19:30:09 +0200 Subject: [PATCH 3/3] test/e2e: run static-pools test on default distro. Don't force static-pools e2e test distro to debian/sid. It looks like govm fails to boot it on recent fedora/docker combos. Signed-off-by: Krisztian Litkey --- test/e2e/policies.test-suite/static-pools/distro.var | 1 - 1 file changed, 1 deletion(-) delete mode 100644 test/e2e/policies.test-suite/static-pools/distro.var diff --git a/test/e2e/policies.test-suite/static-pools/distro.var b/test/e2e/policies.test-suite/static-pools/distro.var deleted file mode 100644 index 086245cd7..000000000 --- a/test/e2e/policies.test-suite/static-pools/distro.var +++ /dev/null @@ -1 +0,0 @@ -debian-sid