From 7d6f3e310763beda04739c0ad068bb1823910020 Mon Sep 17 00:00:00 2001 From: "Alex Ellis (OpenFaaS Ltd)" <alexellis2@gmail.com> Date: Fri, 26 Aug 2022 11:26:58 +0100 Subject: [PATCH] Make data-dir configurable for getting node token When using a different data-dir for K3s on a server, the hard-coded node-token path fails to match a valid token file. So this change allows the join command to override the value for the path. Closes: #373 Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com> --- cmd/install.go | 28 +++++++++++++++++----------- cmd/join.go | 23 ++++++++++++++++++++++- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/cmd/install.go b/cmd/install.go index e5ea8fc1..97e91b26 100644 --- a/cmd/install.go +++ b/cmd/install.go @@ -98,24 +98,30 @@ Provide the --local-path flag with --merge if a kubeconfig already exists in som command.Flags().String("tls-san", "", "Use an additional IP or hostname for the API server") command.PreRunE = func(command *cobra.Command, args []string) error { - _, err := command.Flags().GetIP("ip") + local, err := command.Flags().GetBool("local") if err != nil { return err } - _, err = command.Flags().GetIP("host") - if err != nil { - return err - } + if !local { + _, err := command.Flags().GetIP("ip") + if err != nil { + return err + } - if _, err := command.Flags().GetIP("ip"); err != nil { - return err - } + _, err = command.Flags().GetIP("host") + if err != nil { + return err + } - if _, err := command.Flags().GetInt("ssh-port"); err != nil { - return err - } + if _, err := command.Flags().GetIP("ip"); err != nil { + return err + } + if _, err := command.Flags().GetInt("ssh-port"); err != nil { + return err + } + } return nil } diff --git a/cmd/join.go b/cmd/join.go index f5b44b13..faf5e60b 100644 --- a/cmd/join.go +++ b/cmd/join.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "net" + "path/filepath" "runtime" "strings" @@ -53,6 +54,8 @@ func MakeJoin() *cobra.Command { command.Flags().String("k3s-version", "", "Set a version to install, overrides k3s-channel") command.Flags().String("k3s-channel", PinnedK3sChannel, "Release channel: stable, latest, or i.e. v1.19") + command.Flags().String("server-data-dir", "/var/lib/rancher/k3s/", "Override the path used to fetch the node-token from the server") + command.RunE = func(command *cobra.Command, args []string) error { fmt.Printf("Running: k3sup join\n") @@ -69,6 +72,18 @@ func MakeJoin() *cobra.Command { host = ip.String() } + dataDir, err := command.Flags().GetString("server-data-dir") + if err != nil { + return err + } + if len(dataDir) == 0 { + return fmt.Errorf("--server-data-dir must be set") + } + + if !strings.HasPrefix(dataDir, "/") { + return fmt.Errorf("--server-data-dir must begin with /") + } + serverIP, err := command.Flags().GetIP("server-ip") if err != nil { return err @@ -189,7 +204,7 @@ func MakeJoin() *cobra.Command { defer sshOperator.Close() - getTokenCommand := fmt.Sprintf(sudoPrefix + "cat /var/lib/rancher/k3s/server/node-token\n") + getTokenCommand := fmt.Sprintf("%scat %s\n", sudoPrefix, filepath.Join(dataDir, "/server/node-token")) if printCommand { fmt.Printf("ssh: %s\n", getTokenCommand) } @@ -226,26 +241,32 @@ func MakeJoin() *cobra.Command { } command.PreRunE = func(command *cobra.Command, args []string) error { + _, err := command.Flags().GetIP("ip") if err != nil { return err } + _, err = command.Flags().GetIP("server-ip") if err != nil { return err } + _, err = command.Flags().GetString("host") if err != nil { return err } + _, err = command.Flags().GetString("server-host") if err != nil { return err } + _, err = command.Flags().GetInt("ssh-port") if err != nil { return err } + return nil }