From e28e497168a309c66cc2e3963ebb5aae8589f9f3 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Fri, 1 Mar 2019 17:07:55 -0700 Subject: [PATCH] Add --token-file support --- pkg/cli/agent/agent.go | 29 +++++++++++++++++++++++++++++ pkg/cli/cmds/agent.go | 7 +++++++ 2 files changed, 36 insertions(+) diff --git a/pkg/cli/agent/agent.go b/pkg/cli/agent/agent.go index aaba54ab5e5..647b742d65f 100644 --- a/pkg/cli/agent/agent.go +++ b/pkg/cli/agent/agent.go @@ -3,7 +3,10 @@ package agent import ( "context" "fmt" + "io/ioutil" "os" + "strings" + "time" "github.com/rancher/k3s/pkg/agent" "github.com/rancher/k3s/pkg/cli/cmds" @@ -13,11 +16,37 @@ import ( "github.com/urfave/cli" ) +func readToken(path string) (string, error) { + if path == "" { + return "", nil + } + + for { + tokenBytes, err := ioutil.ReadFile(path) + if err == nil { + return strings.TrimSpace(string(tokenBytes)), nil + } else if os.IsNotExist(err) { + logrus.Infof("Waiting for %s to be available\n", path) + time.Sleep(2 * time.Second) + } else { + return "", err + } + } +} + func Run(ctx *cli.Context) error { if os.Getuid() != 0 { return fmt.Errorf("agent must be ran as root") } + if cmds.AgentConfig.TokenFile != "" { + token, err := readToken(cmds.AgentConfig.TokenFile) + if err != nil { + return err + } + cmds.AgentConfig.Token = token + } + if cmds.AgentConfig.Token == "" && cmds.AgentConfig.ClusterSecret == "" { return fmt.Errorf("--token is required") } diff --git a/pkg/cli/cmds/agent.go b/pkg/cli/cmds/agent.go index dccdb52c34e..3a20a428955 100644 --- a/pkg/cli/cmds/agent.go +++ b/pkg/cli/cmds/agent.go @@ -9,6 +9,7 @@ import ( type Agent struct { Token string + TokenFile string ServerURL string DataDir string NodeIP string @@ -53,6 +54,12 @@ func NewAgentCommand(action func(ctx *cli.Context) error) cli.Command { EnvVar: "K3S_TOKEN", Destination: &AgentConfig.Token, }, + cli.StringFlag{ + Name: "token-file", + Usage: "Token file to use for authentication", + EnvVar: "K3S_TOKEN_FILE", + Destination: &AgentConfig.TokenFile, + }, cli.StringFlag{ Name: "server,s", Usage: "Server to connect to",