Path: blob/main/dev/gpctl/cmd/workspaces-dispose-content.go
2498 views
// Copyright (c) 2020 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package cmd56import (7"context"8"crypto/tls"910"github.com/spf13/cobra"11"golang.org/x/xerrors"12"google.golang.org/grpc"13"google.golang.org/grpc/credentials"14"k8s.io/client-go/kubernetes"1516"github.com/gitpod-io/gitpod/common-go/log"17"github.com/gitpod-io/gitpod/gpctl/pkg/util"18"github.com/gitpod-io/gitpod/ws-daemon/api"19)2021// workspacesDisposeContentCmd represents the dispose-content command22var workspacesDisposeContentCmd = &cobra.Command{23Use: "dispose-content <workspaceID>",24Short: "calls dispose-content for a workspace on ws-daemon. Assumes the ws-daemon is listening on localhost:8080",25Args: cobra.ExactArgs(1),26RunE: func(cmd *cobra.Command, args []string) error {27ctx, cancel := context.WithCancel(context.Background())28defer cancel()2930cfg, namespace, err := getKubeconfig()31if err != nil {32return err33}34clientSet, err := kubernetes.NewForConfig(cfg)35if err != nil {36return err37}3839certPool, err := util.CertPoolFromSecret(clientSet, namespace, "ws-daemon-tls", []string{"ca.crt"})40if err != nil {41return xerrors.Errorf("could not load ca cert: %w", err)42}43cert, err := util.CertFromSecret(clientSet, namespace, "ws-daemon-tls", "tls.crt", "tls.key")44if err != nil {45return xerrors.Errorf("could not load tls cert: %w", err)46}47creds := credentials.NewTLS(&tls.Config{48Certificates: []tls.Certificate{cert},49RootCAs: certPool,50ServerName: "wsdaemon",51})5253conn, err := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(creds))54if err != nil {55return err56}57defer conn.Close()58client := api.NewWorkspaceContentServiceClient(conn)5960instanceID := args[0]61resp, err := client.DisposeWorkspace(ctx, &api.DisposeWorkspaceRequest{62Id: instanceID,63Backup: true,64})65if err != nil {66log.Fatal(err)67}6869log.WithField("instanceId", instanceID).WithField("resp", resp).Info("DisposeWorkspace done")70return nil71},72}7374func init() {75workspacesCmd.AddCommand(workspacesDisposeContentCmd)76}777879