package cmd
import (
"fmt"
"os"
"path/filepath"
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/cobra"
"k8s.io/client-go/rest"
common_grpc "github.com/gitpod-io/gitpod/common-go/grpc"
"github.com/gitpod-io/gitpod/common-go/log"
"github.com/gitpod-io/gitpod/gpctl/pkg/prettyprint"
"github.com/gitpod-io/gitpod/gpctl/pkg/util"
)
var rootCmd = &cobra.Command{
Use: "gpctl",
Short: "Gpctl controls a Gitpod installation",
Args: cobra.MinimumNArgs(1),
}
func Execute() {
common_grpc.SetupLogging()
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func init() {
rootCmd.PersistentFlags().StringP("kubeconfig", "c", "$HOME/.kube/config", "Path to the kubeconfig file used for connecting to the cluster")
rootCmd.PersistentFlags().StringP("output-format", "o", "template", "Output format. One of: string|json|jsonpath|template")
rootCmd.PersistentFlags().String("output-template", "", "Output format Go template or jsonpath. Use with -o template or -o jsonpath")
}
func getKubeconfig() (*rest.Config, string, error) {
kubeconfig, err := rootCmd.PersistentFlags().GetString("kubeconfig")
if err != nil {
return nil, "", err
}
if kubeconfig == "$HOME/.kube/config" {
home, err := homedir.Dir()
if err != nil {
return nil, "", err
}
kubeconfig = filepath.Join(home, ".kube", "config")
}
return util.GetKubeconfig(kubeconfig)
}
func getOutputFormat(defaultTemplate string, defaultJsonpath string) *prettyprint.Printer {
format := prettyprint.TemplateFormat
template := defaultTemplate
jsonpath := defaultJsonpath
if rootCmd.PersistentFlags().Lookup("output-format").Changed {
fm, _ := rootCmd.PersistentFlags().GetString("output-format")
switch fm {
case "json":
format = prettyprint.JSONFormat
case "string":
format = prettyprint.StringFormat
case "template":
format = prettyprint.TemplateFormat
case "jsonpath":
format = prettyprint.JSONPathFormat
template = jsonpath
default:
log.WithField("format", fm).Warn("Unknown format, falling back to template")
}
}
if rootCmd.PersistentFlags().Lookup("output-template").Changed {
template, _ = rootCmd.PersistentFlags().GetString("output-template")
}
return &prettyprint.Printer{
Template: template,
Format: format,
Writer: os.Stdout,
}
}