gitpod/dev/gpctl/cmd/clusters-gettlsconfig.go
2022-12-08 13:05:19 -03:00

90 lines
2.3 KiB
Go

// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.
package cmd
import (
"context"
"fmt"
"io/ioutil"
"os"
"path"
"github.com/gitpod-io/gitpod/common-go/log"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
// clustersGetTlsConfigCmd is the "clusters get-tls-config" cmd
var clustersGetTlsConfigCmd = &cobra.Command{
Use: "get-tls-config",
Short: "Fetches ws-manager TLS config and stores them in a local folder",
Run: func(cmd *cobra.Command, args []string) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
cfg, namespace, err := getKubeconfig()
if err != nil {
log.WithError(err).Fatal("cannot get kubeconfig")
}
clientSet, err := kubernetes.NewForConfig(cfg)
if err != nil {
log.WithError(err).Fatal("cannot create clientset")
}
namespaceOverride, err := cmd.Flags().GetString("namespace")
if err != nil {
log.Fatal(err)
}
if namespaceOverride != "" {
namespace = namespaceOverride
}
secretName, err := cmd.Flags().GetString("secretName")
if err != nil {
log.Fatal(err)
}
tlsPath, err := cmd.Flags().GetString("tls-path")
if err != nil {
log.Fatal(err)
}
secret, err := clientSet.CoreV1().Secrets(namespace).Get(ctx, secretName, metav1.GetOptions{})
if err != nil {
log.Fatal(err)
}
if _, err := os.Stat(tlsPath); os.IsNotExist(err) {
err = os.Mkdir(tlsPath, 0744)
if err != nil {
log.Fatal(err)
}
}
writeFileFromSecretData := func(filename string) {
filepath := path.Join(tlsPath, filename)
data := secret.Data[filename]
err = ioutil.WriteFile(filepath, data, 0744)
if err != nil {
log.Fatal(err)
}
}
writeFileFromSecretData("ca.crt")
writeFileFromSecretData("tls.crt")
writeFileFromSecretData("tls.key")
fmt.Printf("wrote ws-manager TLS config to: %s\n", tlsPath)
},
}
func init() {
clustersGetTlsConfigCmd.Flags().String("secretName", "ws-manager-client-tls", "secret name")
clustersGetTlsConfigCmd.Flags().String("namespace", "", "override the namespace in the current kubectx")
clustersGetTlsConfigCmd.Flags().String("tls-path", "./wsman-tls", "folder to write the secrets to")
clustersCmd.AddCommand(clustersGetTlsConfigCmd)
}