github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/commands/context/set.go (about)

     1  package context
     2  
     3  import (
     4  	"github.com/spf13/cobra"
     5  
     6  	"github.com/kubeshop/testkube/cmd/kubectl-testkube/commands/common"
     7  	"github.com/kubeshop/testkube/cmd/kubectl-testkube/commands/common/validator"
     8  	"github.com/kubeshop/testkube/cmd/kubectl-testkube/config"
     9  	"github.com/kubeshop/testkube/pkg/ui"
    10  )
    11  
    12  func NewSetContextCmd() *cobra.Command {
    13  	var (
    14  		org, env, apiKey string
    15  		kubeconfig       bool
    16  		namespace        string
    17  		opts             common.HelmOptions
    18  	)
    19  
    20  	cmd := &cobra.Command{
    21  		Use:   "context <value>",
    22  		Short: "Set context data for Testkube Pro",
    23  		Run: func(cmd *cobra.Command, args []string) {
    24  
    25  			cfg, err := config.Load()
    26  			ui.ExitOnError("loading config file", err)
    27  			common.ProcessMasterFlags(cmd, &opts, &cfg)
    28  
    29  			if cmd.Flags().Changed("org") {
    30  				opts.Master.OrgId = org
    31  			}
    32  
    33  			if cmd.Flags().Changed("env") {
    34  				opts.Master.EnvId = env
    35  			}
    36  
    37  			if kubeconfig {
    38  				cfg.ContextType = config.ContextTypeKubeconfig
    39  			} else {
    40  				cfg.ContextType = config.ContextTypeCloud
    41  			}
    42  
    43  			switch cfg.ContextType {
    44  			case config.ContextTypeCloud:
    45  				if opts.Master.OrgId == "" && opts.Master.EnvId == "" && apiKey == "" && opts.Master.RootDomain == "" {
    46  					ui.Errf("Please provide at least one of the following flags: --org, --env, --api-key, --root-domain")
    47  				}
    48  
    49  				cfg = common.PopulateCloudConfig(cfg, apiKey, &opts)
    50  
    51  			case config.ContextTypeKubeconfig:
    52  				// kubeconfig special use cases
    53  
    54  			default:
    55  				ui.Errf("Unknown context type: %s", cfg.ContextType)
    56  			}
    57  
    58  			if namespace != "" {
    59  				cfg.Namespace = namespace
    60  			}
    61  
    62  			err = config.Save(cfg)
    63  			ui.ExitOnError("saving config file", err)
    64  
    65  			if err = validator.ValidateCloudContext(cfg); err != nil {
    66  				common.UiCloudContextValidationError(err)
    67  			}
    68  
    69  			ui.Success("Your config was updated with new values")
    70  			ui.NL()
    71  			common.UiPrintContext(cfg)
    72  
    73  		},
    74  	}
    75  
    76  	cmd.Flags().BoolVarP(&kubeconfig, "kubeconfig", "", false, "reset context mode for CLI to default kubeconfig based")
    77  	cmd.Flags().StringVarP(&org, "org", "o", "", "Testkube Pro Organization ID")
    78  	cmd.Flags().MarkDeprecated("org", "use --org-id instead")
    79  	cmd.Flags().StringVarP(&env, "env", "e", "", "Testkube Pro Environment ID")
    80  	cmd.Flags().MarkDeprecated("env", "use --env-id instead")
    81  	cmd.Flags().StringVarP(&namespace, "namespace", "n", "", "Testkube namespace to use for CLI commands")
    82  	cmd.Flags().StringVarP(&apiKey, "api-key", "k", "", "API Key for Testkube Pro")
    83  
    84  	// allow to override default values of all URIs
    85  	cmd.Flags().String("api-uri-override", "", "api uri override")
    86  	cmd.Flags().String("ui-uri-override", "", "ui uri override")
    87  	cmd.Flags().String("agent-uri-override", "", "agnet uri override")
    88  	cmd.Flags().String("logs-uri-override", "", "logs service uri override")
    89  
    90  	common.PopulateMasterFlags(cmd, &opts)
    91  	return cmd
    92  }