github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/commands/common/flags.go (about) 1 package common 2 3 import ( 4 "errors" 5 "strings" 6 7 "github.com/spf13/cobra" 8 9 "github.com/kubeshop/testkube/cmd/kubectl-testkube/config" 10 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 11 ) 12 13 func CreateVariables(cmd *cobra.Command, ignoreSecretVariable bool) (vars map[string]testkube.Variable, err error) { 14 basicParams, err := cmd.Flags().GetStringArray("variable") 15 if err != nil { 16 return vars, err 17 } 18 19 vars = map[string]testkube.Variable{} 20 21 for _, v := range basicParams { 22 values := strings.SplitN(v, "=", 2) 23 if len(values) != 2 { 24 return vars, errors.New("wrong number of variable params") 25 } 26 27 vars[values[0]] = testkube.NewBasicVariable(values[0], values[1]) 28 } 29 30 if !ignoreSecretVariable { 31 secretParams, err := cmd.Flags().GetStringArray("secret-variable") 32 if err != nil { 33 return vars, err 34 } 35 36 for _, v := range secretParams { 37 values := strings.SplitN(v, "=", 2) 38 if len(values) != 2 { 39 return vars, errors.New("wrong number of secret variable params") 40 } 41 42 vars[values[0]] = testkube.NewSecretVariable(values[0], values[1]) 43 } 44 } 45 46 secretParamReferences, err := cmd.Flags().GetStringToString("secret-variable-reference") 47 if err != nil { 48 return vars, err 49 } 50 for k, v := range secretParamReferences { 51 values := strings.Split(v, "=") 52 if len(values) != 2 { 53 return vars, errors.New("wrong number of secret reference params") 54 } 55 56 vars[k] = testkube.NewSecretVariableReference(k, values[0], values[1]) 57 } 58 59 return 60 } 61 62 func PopulateMasterFlags(cmd *cobra.Command, opts *HelmOptions) { 63 var ( 64 apiURIPrefix, uiURIPrefix, agentURIPrefix, cloudRootDomain, proRootDomain string 65 insecure bool 66 ) 67 68 cmd.Flags().BoolVar(&insecure, "cloud-insecure", false, "should client connect in insecure mode (will use http instead of https)") 69 cmd.Flags().MarkDeprecated("cloud-insecure", "use --master-insecure instead") 70 cmd.Flags().StringVar(&agentURIPrefix, "cloud-agent-prefix", defaultAgentPrefix, "usually don't need to be changed [required for custom cloud mode]") 71 cmd.Flags().MarkDeprecated("cloud-agent-prefix", "use --agent-prefix instead") 72 cmd.Flags().StringVar(&apiURIPrefix, "cloud-api-prefix", defaultApiPrefix, "usually don't need to be changed [required for custom cloud mode]") 73 cmd.Flags().MarkDeprecated("cloud-api-prefix", "use --api-prefix instead") 74 cmd.Flags().StringVar(&uiURIPrefix, "cloud-ui-prefix", defaultUiPrefix, "usually don't need to be changed [required for custom cloud mode]") 75 cmd.Flags().MarkDeprecated("cloud-ui-prefix", "use --ui-prefix instead") 76 cmd.Flags().StringVar(&cloudRootDomain, "cloud-root-domain", defaultRootDomain, "usually don't need to be changed [required for custom cloud mode]") 77 cmd.Flags().MarkDeprecated("cloud-root-domain", "use --root-domain instead") 78 cmd.Flags().StringVar(&proRootDomain, "pro-root-domain", defaultRootDomain, "usually don't need to be changed [required for custom pro mode]") 79 cmd.Flags().MarkDeprecated("pro-root-domain", "use --root-domain instead") 80 81 cmd.Flags().BoolVar(&opts.Master.Insecure, "master-insecure", false, "should client connect in insecure mode (will use http instead of https)") 82 cmd.Flags().StringVar(&opts.Master.AgentUrlPrefix, "agent-prefix", defaultAgentPrefix, "usually don't need to be changed [required for custom cloud mode]") 83 cmd.Flags().StringVar(&opts.Master.ApiUrlPrefix, "api-prefix", defaultApiPrefix, "usually don't need to be changed [required for custom cloud mode]") 84 cmd.Flags().StringVar(&opts.Master.LogsUrlPrefix, "logs-prefix", defaultLogsPrefix, "usually don't need to be changed [required for custom cloud mode]") 85 cmd.Flags().StringVar(&opts.Master.UiUrlPrefix, "ui-prefix", defaultUiPrefix, "usually don't need to be changed [required for custom cloud mode]") 86 cmd.Flags().StringVar(&opts.Master.RootDomain, "root-domain", defaultRootDomain, "usually don't need to be changed [required for custom cloud mode]") 87 88 cmd.Flags().StringVar(&opts.Master.URIs.Agent, "agent-uri", "", "Testkube Cloud agent URI [required for centralized mode]") 89 cmd.Flags().StringVar(&opts.Master.URIs.Logs, "logs-uri", "", "Testkube Cloud logs URI [required for centralized mode]") 90 cmd.Flags().StringVar(&opts.Master.AgentToken, "agent-token", "", "Testkube Cloud agent key [required for centralized mode]") 91 cmd.Flags().StringVar(&opts.Master.OrgId, "org-id", "", "Testkube Cloud organization id [required for centralized mode]") 92 cmd.Flags().StringVar(&opts.Master.EnvId, "env-id", "", "Testkube Cloud environment id [required for centralized mode]") 93 94 cmd.Flags().BoolVar(&opts.Master.Features.LogsV2, "feature-logs-v2", false, "Logs v2 feature flag") 95 } 96 97 func ProcessMasterFlags(cmd *cobra.Command, opts *HelmOptions, cfg *config.Data) { 98 configured := cfg != nil 99 if !cmd.Flags().Changed("master-insecure") { 100 if cmd.Flags().Changed("cloud-insecure") { 101 opts.Master.Insecure = cmd.Flag("cloud-insecure").Value.String() == "true" 102 } else if configured && cfg.Master.Insecure { 103 opts.Master.Insecure = cfg.Master.Insecure 104 } 105 } 106 107 if !cmd.Flags().Changed("agent-prefix") { 108 if cmd.Flags().Changed("cloud-agent-prefix") { 109 opts.Master.AgentUrlPrefix = cmd.Flag("cloud-agent-prefix").Value.String() 110 } else if configured && cfg.Master.AgentUrlPrefix != "" { 111 opts.Master.AgentUrlPrefix = cfg.Master.AgentUrlPrefix 112 } 113 } 114 115 if !cmd.Flags().Changed("api-prefix") { 116 if cmd.Flags().Changed("cloud-api-prefix") { 117 opts.Master.ApiUrlPrefix = cmd.Flag("cloud-api-prefix").Value.String() 118 } else if configured && cfg.Master.ApiUrlPrefix != "" { 119 opts.Master.ApiUrlPrefix = cfg.Master.ApiUrlPrefix 120 } 121 } 122 123 if !cmd.Flags().Changed("ui-prefix") { 124 if cmd.Flags().Changed("cloud-ui-prefix") { 125 opts.Master.UiUrlPrefix = cmd.Flag("cloud-ui-prefix").Value.String() 126 } else if configured && cfg.Master.UiUrlPrefix != "" { 127 opts.Master.UiUrlPrefix = cfg.Master.UiUrlPrefix 128 } 129 } 130 131 if !cmd.Flags().Changed("root-domain") { 132 switch { 133 case cmd.Flags().Changed("pro-root-domain"): 134 opts.Master.RootDomain = cmd.Flag("pro-root-domain").Value.String() 135 case cmd.Flags().Changed("cloud-root-domain"): 136 opts.Master.RootDomain = cmd.Flag("cloud-root-domain").Value.String() 137 case configured && cfg.Master.RootDomain != "": 138 opts.Master.RootDomain = cfg.Master.RootDomain 139 } 140 } 141 142 if cmd.Flag("insecure") != nil && cmd.Flag("insecure").Value.String() == "true" { 143 opts.Master.Insecure = true 144 } 145 146 if cmd.Flag("api-prefix") != nil && cmd.Flags().Changed("api-prefix") { 147 opts.Master.ApiUrlPrefix = cmd.Flag("api-prefix").Value.String() 148 } 149 150 if cmd.Flag("ui-prefix") != nil && cmd.Flags().Changed("ui-prefix") { 151 opts.Master.ApiUrlPrefix = cmd.Flag("api-prefix").Value.String() 152 } 153 154 if cmd.Flag("logs-prefix") != nil && cmd.Flags().Changed("logs-prefix") { 155 opts.Master.ApiUrlPrefix = cmd.Flag("api-prefix").Value.String() 156 } 157 158 uris := NewMasterUris(opts.Master.ApiUrlPrefix, 159 opts.Master.UiUrlPrefix, 160 opts.Master.AgentUrlPrefix, 161 opts.Master.LogsUrlPrefix, 162 opts.Master.URIs.Agent, 163 opts.Master.URIs.Logs, 164 opts.Master.RootDomain, 165 opts.Master.Insecure) 166 167 // override whole URIs usually composed from prefix - host parts 168 if cmd.Flag("agent-uri-override") != nil && cmd.Flags().Changed("agent-uri-override") { 169 uris.WithAgentURI(cmd.Flag("agent-uri-override").Value.String()) 170 } 171 172 if cmd.Flag("logs-uri-override") != nil && cmd.Flags().Changed("logs-uri-override") { 173 uris.WithLogsURI(cmd.Flag("logs-uri-override").Value.String()) 174 } 175 176 if cmd.Flag("api-uri-override") != nil && cmd.Flags().Changed("api-uri-override") { 177 uris.WithApiURI(cmd.Flag("api-uri-override").Value.String()) 178 } 179 180 if cmd.Flag("ui-uri-override") != nil && cmd.Flags().Changed("ui-uri-override") { 181 uris.WithUiURI(cmd.Flag("ui-uri-override").Value.String()) 182 } 183 184 opts.Master.URIs = uris 185 186 }