diff --git a/README.md b/README.md index 849f95a9..2f156229 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Thanks to @zeerorg for the original work! ## Requirements -- docker +- [docker](https://docs.docker.com/install/) ## Install diff --git a/cli/commands.go b/cli/commands.go index 13a80dd3..f37ae62e 100644 --- a/cli/commands.go +++ b/cli/commands.go @@ -30,34 +30,54 @@ func CreateCluster(c *cli.Context) error { if c.IsSet("timeout") && !c.IsSet("wait") { return errors.New("Cannot use --timeout flag without --wait flag") } + port := fmt.Sprintf("%s:%s", c.String("port"), c.String("port")) image := fmt.Sprintf("rancher/k3s:%s", c.String("version")) cmd := "docker" + + // default docker arguments args := []string{ "run", "--name", c.String("name"), - "-e", "K3S_KUBECONFIG_OUTPUT=/output/kubeconfig.yaml", "--publish", port, "--privileged", + "--detach", + "--env", "K3S_KUBECONFIG_OUTPUT=/output/kubeconfig.yaml", } + + // additional docker arguments extraArgs := []string{} + if c.IsSet("env") || c.IsSet("e") { + for _, env := range c.StringSlice("env") { + extraArgs = append(extraArgs, "--env", env) + } + } if c.IsSet("volume") { extraArgs = append(extraArgs, "--volume", c.String("volume")) } if len(extraArgs) > 0 { args = append(args, extraArgs...) } + + // k3s version and options args = append(args, - "-d", image, "server", // cmd "--https-listen-port", c.String("port"), //args ) + + // additional k3s server arguments + if c.IsSet("server-arg") || c.IsSet("x") { + args = append(args, c.StringSlice("server-arg")...) + } + + // let's go log.Printf("Creating cluster [%s]", c.String("name")) if err := runCommand(true, cmd, args...); err != nil { return fmt.Errorf("ERROR: couldn't create cluster [%s]\n%+v", c.String("name"), err) } + // wait for k3s to be up and running if we want it start := time.Now() timeout := time.Duration(c.Int("timeout")) * time.Second for c.IsSet("wait") { diff --git a/main.go b/main.go index 69434422..f38f5a85 100644 --- a/main.go +++ b/main.go @@ -4,7 +4,7 @@ import ( "log" "os" - "github.com/iwilltry42/k3d/cli" + run "github.com/iwilltry42/k3d/cli" "github.com/iwilltry42/k3d/version" "github.com/urfave/cli" ) @@ -67,13 +67,21 @@ func main() { Name: "wait, w", Usage: "Wait for the cluster to come up", }, + cli.StringSliceFlag{ + Name: "server-arg, x", + Usage: "Pass an additional argument to k3s server (new flag per argument)", + }, + cli.StringSliceFlag{ + Name: "env, e", + Usage: "Pass an additional environment variable (new flag per variable)", + }, }, Action: run.CreateCluster, }, { // delete deletes an existing k3s cluster (remove container and cluster directory) Name: "delete", - Aliases: []string{"d"}, + Aliases: []string{"d", "del"}, Usage: "Delete cluster", Flags: []cli.Flag{ cli.StringFlag{