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  }