github.com/gravitational/teleport/api@v0.0.0-20240507183017-3110591cbafc/client/kubewaitingcontainer/kubewaitingcontainer.go (about) 1 // Copyright 2023 Gravitational, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package kubewaitingcontainer 16 17 import ( 18 "context" 19 20 "github.com/gravitational/trace" 21 22 kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1" 23 ) 24 25 // Client is a KubeWaitingContainers client. 26 type Client struct { 27 grpcClient kubewaitingcontainerpb.KubeWaitingContainersServiceClient 28 } 29 30 // NewClient creates a new KubeWaitingContainers client. 31 func NewClient(grpcClient kubewaitingcontainerpb.KubeWaitingContainersServiceClient) *Client { 32 return &Client{ 33 grpcClient: grpcClient, 34 } 35 } 36 37 // ListKubernetesWaitingContainers lists Kubernetes ephemeral 38 // containers that are waiting to be created until moderated 39 // session conditions are met. 40 func (c *Client) ListKubernetesWaitingContainers(ctx context.Context, pageSize int, pageToken string) ([]*kubewaitingcontainerpb.KubernetesWaitingContainer, string, error) { 41 resp, err := c.grpcClient.ListKubernetesWaitingContainers(ctx, &kubewaitingcontainerpb.ListKubernetesWaitingContainersRequest{ 42 PageSize: int32(pageSize), 43 PageToken: pageToken, 44 }) 45 if err != nil { 46 return nil, "", trace.Wrap(err) 47 } 48 49 return resp.WaitingContainers, resp.NextPageToken, nil 50 } 51 52 // GetKubernetesWaitingContainer returns a Kubernetes ephemeral 53 // container that is waiting to be created until moderated 54 // session conditions are met. 55 func (c *Client) GetKubernetesWaitingContainer(ctx context.Context, req *kubewaitingcontainerpb.GetKubernetesWaitingContainerRequest) (*kubewaitingcontainerpb.KubernetesWaitingContainer, error) { 56 if req.Username == "" { 57 return nil, trace.BadParameter("missing Username") 58 } 59 if req.Cluster == "" { 60 return nil, trace.BadParameter("missing Cluster") 61 } 62 if req.Namespace == "" { 63 return nil, trace.BadParameter("missing Namespace") 64 } 65 if req.PodName == "" { 66 return nil, trace.BadParameter("missing PodName") 67 } 68 if req.ContainerName == "" { 69 return nil, trace.BadParameter("missing ContainerName") 70 } 71 72 out, err := c.grpcClient.GetKubernetesWaitingContainer(ctx, &kubewaitingcontainerpb.GetKubernetesWaitingContainerRequest{ 73 Username: req.Username, 74 Cluster: req.Cluster, 75 Namespace: req.Namespace, 76 PodName: req.PodName, 77 ContainerName: req.ContainerName, 78 }) 79 if err != nil { 80 return nil, trace.Wrap(err) 81 } 82 83 return out, nil 84 } 85 86 // CreateKubernetesWaitingContainer creates a Kubernetes ephemeral 87 // container that is waiting to be created until moderated 88 // session conditions are met. 89 func (c *Client) CreateKubernetesWaitingContainer(ctx context.Context, waitingPod *kubewaitingcontainerpb.KubernetesWaitingContainer) (*kubewaitingcontainerpb.KubernetesWaitingContainer, error) { 90 out, err := c.grpcClient.CreateKubernetesWaitingContainer(ctx, &kubewaitingcontainerpb.CreateKubernetesWaitingContainerRequest{ 91 WaitingContainer: waitingPod, 92 }) 93 if err != nil { 94 return nil, trace.Wrap(err) 95 } 96 97 return out, nil 98 } 99 100 // DeleteKubernetesWaitingContainer returns a Kubernetes ephemeral 101 // container that is waiting to be created until moderated 102 // session conditions are met. 103 func (c *Client) DeleteKubernetesWaitingContainer(ctx context.Context, req *kubewaitingcontainerpb.DeleteKubernetesWaitingContainerRequest) error { 104 if req.Username == "" { 105 return trace.BadParameter("missing Username") 106 } 107 if req.Cluster == "" { 108 return trace.BadParameter("missing Cluster") 109 } 110 if req.Namespace == "" { 111 return trace.BadParameter("missing Namespace") 112 } 113 if req.PodName == "" { 114 return trace.BadParameter("missing PodName") 115 } 116 if req.ContainerName == "" { 117 return trace.BadParameter("missing ContainerName") 118 } 119 120 _, err := c.grpcClient.DeleteKubernetesWaitingContainer(ctx, &kubewaitingcontainerpb.DeleteKubernetesWaitingContainerRequest{ 121 Username: req.Username, 122 Cluster: req.Cluster, 123 Namespace: req.Namespace, 124 PodName: req.PodName, 125 ContainerName: req.ContainerName, 126 }) 127 128 return trace.Wrap(err) 129 }