Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/dev/gpctl/cmd/clusters-gettlsconfig.go
2496 views
1
// Copyright (c) 2021 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
"fmt"
10
"io/ioutil"
11
"os"
12
"path"
13
14
"github.com/gitpod-io/gitpod/common-go/log"
15
16
"github.com/spf13/cobra"
17
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18
"k8s.io/client-go/kubernetes"
19
)
20
21
// clustersGetTlsConfigCmd is the "clusters get-tls-config" cmd
22
var clustersGetTlsConfigCmd = &cobra.Command{
23
Use: "get-tls-config",
24
Short: "Fetches ws-manager TLS config and stores them in a local folder",
25
Run: func(cmd *cobra.Command, args []string) {
26
ctx, cancel := context.WithCancel(context.Background())
27
defer cancel()
28
29
cfg, namespace, err := getKubeconfig()
30
if err != nil {
31
log.WithError(err).Fatal("cannot get kubeconfig")
32
}
33
clientSet, err := kubernetes.NewForConfig(cfg)
34
if err != nil {
35
log.WithError(err).Fatal("cannot create clientset")
36
}
37
38
namespaceOverride, err := cmd.Flags().GetString("namespace")
39
if err != nil {
40
log.Fatal(err)
41
}
42
if namespaceOverride != "" {
43
namespace = namespaceOverride
44
}
45
46
secretName, err := cmd.Flags().GetString("secretName")
47
if err != nil {
48
log.Fatal(err)
49
}
50
51
tlsPath, err := cmd.Flags().GetString("tls-path")
52
if err != nil {
53
log.Fatal(err)
54
}
55
56
secret, err := clientSet.CoreV1().Secrets(namespace).Get(ctx, secretName, metav1.GetOptions{})
57
if err != nil {
58
log.Fatal(err)
59
}
60
61
if _, err := os.Stat(tlsPath); os.IsNotExist(err) {
62
err = os.Mkdir(tlsPath, 0744)
63
if err != nil {
64
log.Fatal(err)
65
}
66
}
67
writeFileFromSecretData := func(filename string) {
68
filepath := path.Join(tlsPath, filename)
69
data := secret.Data[filename]
70
err = ioutil.WriteFile(filepath, data, 0744)
71
if err != nil {
72
log.Fatal(err)
73
}
74
}
75
writeFileFromSecretData("ca.crt")
76
writeFileFromSecretData("tls.crt")
77
writeFileFromSecretData("tls.key")
78
79
fmt.Printf("wrote ws-manager TLS config to: %s\n", tlsPath)
80
},
81
}
82
83
func init() {
84
clustersGetTlsConfigCmd.Flags().String("secretName", "ws-manager-mk2-client-tls", "secret name")
85
clustersGetTlsConfigCmd.Flags().String("namespace", "", "override the namespace in the current kubectx")
86
clustersGetTlsConfigCmd.Flags().String("tls-path", "./wsman-tls", "folder to write the secrets to")
87
88
clustersCmd.AddCommand(clustersGetTlsConfigCmd)
89
}
90
91