Skip to content

Commit 1d7d20c

Browse files
csweichelroboquat
authored andcommitted
[gpctl] Add dispose-workspace command
1 parent fb81176 commit 1d7d20c

File tree

3 files changed

+91
-1
lines changed

3 files changed

+91
-1
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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+
}

dev/gpctl/go.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ require (
1010
github.com/gitpod-io/gitpod/common-go v0.0.0-00010101000000-000000000000
1111
github.com/gitpod-io/gitpod/content-service/api v0.0.0-00010101000000-000000000000
1212
github.com/gitpod-io/gitpod/image-builder/api v0.0.0-00010101000000-000000000000
13+
github.com/gitpod-io/gitpod/ws-daemon/api v0.0.0-00010101000000-000000000000
1314
github.com/gitpod-io/gitpod/ws-manager-bridge/api v0.0.0-00010101000000-000000000000
1415
github.com/gitpod-io/gitpod/ws-manager/api v0.0.0-00010101000000-000000000000
1516
github.com/huandu/xstrings v1.3.2 // indirect
@@ -28,6 +29,9 @@ require (
2829
github.com/beorn7/perks v1.0.1 // indirect
2930
github.com/cespare/xxhash/v2 v2.1.1 // indirect
3031
github.com/davecgh/go-spew v1.1.1 // indirect
32+
github.com/fatih/camelcase v1.0.0 // indirect
33+
github.com/fatih/gomodifytags v1.14.0 // indirect
34+
github.com/fatih/structtag v1.2.0 // indirect
3135
github.com/go-logr/logr v0.4.0 // indirect
3236
github.com/gogo/protobuf v1.3.2 // indirect
3337
github.com/golang/protobuf v1.5.2 // indirect
@@ -61,6 +65,7 @@ require (
6165
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d // indirect
6266
golang.org/x/text v0.3.6 // indirect
6367
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
68+
golang.org/x/tools v0.1.1 // indirect
6469
google.golang.org/appengine v1.6.5 // indirect
6570
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154 // indirect
6671
gopkg.in/inf.v0 v0.9.1 // indirect

dev/gpctl/go.sum

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ
3232
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
3333
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3434
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
35-
github.com/HdrHistogram/hdrhistogram-go v1.1.0 h1:6dpdDPTRoo78HxAJ6T1HfMiKSnqhgRRqzCuPshRkQ7I=
3635
github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
3736
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
3837
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
@@ -99,7 +98,13 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m
9998
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
10099
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
101100
github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
101+
github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
102+
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
102103
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
104+
github.com/fatih/gomodifytags v1.14.0 h1:4D0ZKYMUgY3bvDn2S7TwOJAsgg5o3UhpwDZtkP9FviU=
105+
github.com/fatih/gomodifytags v1.14.0/go.mod h1:TbUyEjH1Zo0GkJd2Q52oVYqYcJ0eGNqG8bsiOb75P9c=
106+
github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
107+
github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
103108
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
104109
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
105110
github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
@@ -433,6 +438,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
433438
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
434439
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
435440
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
441+
golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
436442
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
437443
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
438444
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -543,6 +549,7 @@ golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2M
543549
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
544550
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
545551
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
552+
golang.org/x/tools v0.0.0-20180824175216-6c1c5e93cdc1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
546553
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
547554
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
548555
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -578,6 +585,7 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK
578585
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
579586
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
580587
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
588+
golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs=
581589
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
582590
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
583591
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

0 commit comments

Comments
 (0)