From 00b5fae0ff71f5d437b51a1fde70aa5a21d20e8d Mon Sep 17 00:00:00 2001 From: Miles Garnsey <11435896+Miles-Garnsey@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:13:20 +1000 Subject: [PATCH] Add ability to override ports and IPs for source cluster. (#53) * Add ability to override ports and IPs for source cluster. Co-authored-by: Alexander Dejanovski --------- Co-authored-by: Alexander Dejanovski --- cmd/kubectl-k8ssandra/register/command.go | 23 +++++++++++-------- .../register/registration.go | 22 ++++++++++-------- pkg/registration/kubeconfig.go | 7 +++++- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/cmd/kubectl-k8ssandra/register/command.go b/cmd/kubectl-k8ssandra/register/command.go index 358c8d6..15a5c66 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("override-src-ip").Value.String(), + OverrideSourcePort: cmd.Flag("override-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 f1d08c0..2dcda23 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 { @@ -101,7 +103,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/kubeconfig.go b/pkg/registration/kubeconfig.go index 20f66af..810ee6a 100644 --- a/pkg/registration/kubeconfig.go +++ b/pkg/registration/kubeconfig.go @@ -63,12 +63,17 @@ func GetKubeconfigFileLocation(location string) (string, error) { } } -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 + } path, err := GetKubeconfigFileLocation(configFileLocation) if err != nil { return "", err } + clientConfig, err := clientcmd.LoadFromFile(path) + if err != nil { return "", err }