Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/dev/gpctl/cmd/workspaces-dispose-content.go
2498 views
1
// Copyright (c) 2020 Gitpod GmbH. All rights reserved.
2
// Licensed under the GNU Affero General Public License (AGPL).
3
// See License.AGPL.txt in the project root for license information.
4
5
package cmd
6
7
import (
8
"context"
9
"crypto/tls"
10
11
"github.com/spf13/cobra"
12
"golang.org/x/xerrors"
13
"google.golang.org/grpc"
14
"google.golang.org/grpc/credentials"
15
"k8s.io/client-go/kubernetes"
16
17
"github.com/gitpod-io/gitpod/common-go/log"
18
"github.com/gitpod-io/gitpod/gpctl/pkg/util"
19
"github.com/gitpod-io/gitpod/ws-daemon/api"
20
)
21
22
// workspacesDisposeContentCmd represents the dispose-content command
23
var workspacesDisposeContentCmd = &cobra.Command{
24
Use: "dispose-content <workspaceID>",
25
Short: "calls dispose-content for a workspace on ws-daemon. Assumes the ws-daemon is listening on localhost:8080",
26
Args: cobra.ExactArgs(1),
27
RunE: func(cmd *cobra.Command, args []string) error {
28
ctx, cancel := context.WithCancel(context.Background())
29
defer cancel()
30
31
cfg, namespace, err := getKubeconfig()
32
if err != nil {
33
return err
34
}
35
clientSet, err := kubernetes.NewForConfig(cfg)
36
if err != nil {
37
return err
38
}
39
40
certPool, err := util.CertPoolFromSecret(clientSet, namespace, "ws-daemon-tls", []string{"ca.crt"})
41
if err != nil {
42
return xerrors.Errorf("could not load ca cert: %w", err)
43
}
44
cert, err := util.CertFromSecret(clientSet, namespace, "ws-daemon-tls", "tls.crt", "tls.key")
45
if err != nil {
46
return xerrors.Errorf("could not load tls cert: %w", err)
47
}
48
creds := credentials.NewTLS(&tls.Config{
49
Certificates: []tls.Certificate{cert},
50
RootCAs: certPool,
51
ServerName: "wsdaemon",
52
})
53
54
conn, err := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(creds))
55
if err != nil {
56
return err
57
}
58
defer conn.Close()
59
client := api.NewWorkspaceContentServiceClient(conn)
60
61
instanceID := args[0]
62
resp, err := client.DisposeWorkspace(ctx, &api.DisposeWorkspaceRequest{
63
Id: instanceID,
64
Backup: true,
65
})
66
if err != nil {
67
log.Fatal(err)
68
}
69
70
log.WithField("instanceId", instanceID).WithField("resp", resp).Info("DisposeWorkspace done")
71
return nil
72
},
73
}
74
75
func init() {
76
workspacesCmd.AddCommand(workspacesDisposeContentCmd)
77
}
78
79