mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
92 lines
2.7 KiB
Go
92 lines
2.7 KiB
Go
// Copyright (c) 2020 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 (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/gitpod-io/gitpod/common-go/log"
|
|
"github.com/gitpod-io/gitpod/gpctl/pkg/prettyprint"
|
|
"github.com/gitpod-io/gitpod/gpctl/pkg/util"
|
|
|
|
homedir "github.com/mitchellh/go-homedir"
|
|
"github.com/spf13/cobra"
|
|
"k8s.io/client-go/rest"
|
|
)
|
|
|
|
// rootCmd represents the base command when called without any subcommands
|
|
var rootCmd = &cobra.Command{
|
|
Use: "gpctl",
|
|
Short: "Gpctl controls a Gitpod installation",
|
|
Args: cobra.MinimumNArgs(1),
|
|
BashCompletionFunction: bashCompletionFunc,
|
|
}
|
|
|
|
// Execute adds all child commands to the root command and sets flags appropriately.
|
|
// This is called by main.main(). It only needs to happen once to the rootCmd.
|
|
func Execute() {
|
|
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,
|
|
}
|
|
}
|