From 2e381373e4cc6b497428c2e105f99cb98c7bcf68 Mon Sep 17 00:00:00 2001 From: Miles Garnsey Date: Mon, 24 Jun 2024 11:25:21 +1000 Subject: [PATCH] Add ability to override ports and IPs for source cluster. --- cmd/kubectl-k8ssandra/register/command.go | 23 +++++++++++-------- .../register/registration.go | 22 ++++++++++-------- .../get_client_from_kubeconfig.go | 5 +++- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/cmd/kubectl-k8ssandra/register/command.go b/cmd/kubectl-k8ssandra/register/command.go index 358c8d6..bb9724f 100644 --- a/cmd/kubectl-k8ssandra/register/command.go +++ b/cmd/kubectl-k8ssandra/register/command.go @@ -30,6 +30,8 @@ func SetupRegisterClusterCmd(cmd *cobra.Command, streams genericclioptions.IOStr RegisterClusterCmd.Flags().String("dest-namespace", "k8ssandra-operator", "namespace where secret and clientConfig will be created on destination cluster") RegisterClusterCmd.Flags().String("serviceaccount-name", "k8ssandra-operator", "serviceaccount name for destination cluster") RegisterClusterCmd.Flags().String("destination-name", "", "name for remote clientConfig and secret on destination cluster") + RegisterClusterCmd.Flags().String("oride-src-ip", "", "override source IP for when you need to specify a different IP for the source cluster than is contained in kubeconfig") + RegisterClusterCmd.Flags().String("oride-src-port", "", "override source port for when you need to specify a different port for the source cluster than is contained in src kubeconfig") if err := RegisterClusterCmd.MarkFlagRequired("source-context"); err != nil { panic(err) @@ -38,6 +40,7 @@ func SetupRegisterClusterCmd(cmd *cobra.Command, streams genericclioptions.IOStr if err := RegisterClusterCmd.MarkFlagRequired("dest-context"); err != nil { panic(err) } + RegisterClusterCmd.MarkFlagsRequiredTogether("oride-src-ip", "oride-src-port") cmd.AddCommand(RegisterClusterCmd) } @@ -69,14 +72,16 @@ func NewRegistrationExecutorFromRegisterClusterCmd(cmd cobra.Command) *Registrat destName = registration.CleanupForKubernetes(srcContext) } return &RegistrationExecutor{ - SourceKubeconfig: cmd.Flag("source-kubeconfig").Value.String(), - DestKubeconfig: cmd.Flag("dest-kubeconfig").Value.String(), - SourceContext: srcContext, - DestContext: cmd.Flag("dest-context").Value.String(), - SourceNamespace: cmd.Flag("source-namespace").Value.String(), - DestNamespace: cmd.Flag("dest-namespace").Value.String(), - ServiceAccount: cmd.Flag("serviceaccount-name").Value.String(), - Context: cmd.Context(), - DestinationName: destName, + SourceKubeconfig: cmd.Flag("source-kubeconfig").Value.String(), + DestKubeconfig: cmd.Flag("dest-kubeconfig").Value.String(), + SourceContext: srcContext, + DestContext: cmd.Flag("dest-context").Value.String(), + SourceNamespace: cmd.Flag("source-namespace").Value.String(), + DestNamespace: cmd.Flag("dest-namespace").Value.String(), + ServiceAccount: cmd.Flag("serviceaccount-name").Value.String(), + overrideSourceIP: cmd.Flag("oride-src-ip").Value.String(), + overrideSourcePort: cmd.Flag("oride-src-port").Value.String(), + Context: cmd.Context(), + DestinationName: destName, } } diff --git a/cmd/kubectl-k8ssandra/register/registration.go b/cmd/kubectl-k8ssandra/register/registration.go index 164125c..5047379 100644 --- a/cmd/kubectl-k8ssandra/register/registration.go +++ b/cmd/kubectl-k8ssandra/register/registration.go @@ -18,15 +18,17 @@ import ( ) type RegistrationExecutor struct { - DestinationName string - SourceKubeconfig string - DestKubeconfig string - SourceContext string - DestContext string - SourceNamespace string - DestNamespace string - ServiceAccount string - Context context.Context + DestinationName string + SourceKubeconfig string + DestKubeconfig string + SourceContext string + DestContext string + SourceNamespace string + DestNamespace string + ServiceAccount string + overrideSourceIP string + overrideSourcePort string + Context context.Context } func getDefaultSecret(saNamespace, saName string) *corev1.Secret { @@ -104,7 +106,7 @@ func (e *RegistrationExecutor) RegisterCluster() error { } // Create Secret on destination cluster - host, err := registration.KubeconfigToHost(e.SourceKubeconfig, e.SourceContext) + host, err := registration.KubeconfigToHost(e.SourceKubeconfig, e.SourceContext, e.overrideSourceIP, e.overrideSourcePort) if err != nil { return err } diff --git a/pkg/registration/get_client_from_kubeconfig.go b/pkg/registration/get_client_from_kubeconfig.go index 93bd9fe..9e10d7b 100644 --- a/pkg/registration/get_client_from_kubeconfig.go +++ b/pkg/registration/get_client_from_kubeconfig.go @@ -58,7 +58,10 @@ func GetKubeconfigFileLocation(location string) string { } } -func KubeconfigToHost(configFileLocation string, contextName string) (string, error) { +func KubeconfigToHost(configFileLocation string, contextName string, overrideSourceIP string, overrideSourcePort string) (string, error) { + if overrideSourceIP != "" && overrideSourcePort != "" { + return fmt.Sprintf("https://%s:%s", overrideSourceIP, overrideSourcePort), nil + } clientConfig, err := clientcmd.LoadFromFile(GetKubeconfigFileLocation(configFileLocation)) if err != nil { return "", err