Most k3d arguments are using in "stringSlice" style, allowing the argument to supplied multiple times. Currently "volume" is an exception to this style, require multiple arguments to be supplied in a single argument, separated by comma. This commit improve the k3d usability by improve the consistency of its argument style.
211 lines
5.5 KiB
Go
211 lines
5.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
run "github.com/rancher/k3d/cli"
|
|
"github.com/rancher/k3d/version"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
// defaultK3sImage specifies the default image being used for server and workers
|
|
const defaultK3sImage = "docker.io/rancher/k3s"
|
|
const defaultK3sClusterName string = "k3s-default"
|
|
|
|
// main represents the CLI application
|
|
func main() {
|
|
|
|
// App Details
|
|
app := cli.NewApp()
|
|
app.Name = "k3d"
|
|
app.Usage = "Run k3s in Docker!"
|
|
app.Version = version.GetVersion()
|
|
app.Authors = []cli.Author{
|
|
cli.Author{
|
|
Name: "Thorsten Klein",
|
|
Email: "iwilltry42@gmail.com",
|
|
},
|
|
cli.Author{
|
|
Name: "Rishabh Gupta",
|
|
Email: "r.g.gupta@outlook.com",
|
|
},
|
|
cli.Author{
|
|
Name: "Darren Shepherd",
|
|
},
|
|
}
|
|
|
|
// commands that you can execute
|
|
app.Commands = []cli.Command{
|
|
{
|
|
// check-tools verifies that docker is up and running
|
|
Name: "check-tools",
|
|
Aliases: []string{"ct"},
|
|
Usage: "Check if docker is running",
|
|
Action: run.CheckTools,
|
|
},
|
|
{
|
|
// create creates a new k3s cluster in docker containers
|
|
Name: "create",
|
|
Aliases: []string{"c"},
|
|
Usage: "Create a single- or multi-node k3s cluster in docker containers",
|
|
Flags: []cli.Flag{
|
|
cli.StringFlag{
|
|
Name: "name, n",
|
|
Value: defaultK3sClusterName,
|
|
Usage: "Set a name for the cluster",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "volume, v",
|
|
Usage: "Mount one or more volumes into every node of the cluster (Docker notation: `source:destination`)",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "publish, add-port",
|
|
Usage: "Publish k3s node ports to the host (Format: `[ip:][host-port:]container-port[/protocol]@node-specifier`, use multiple options to expose more ports)",
|
|
},
|
|
cli.IntFlag{
|
|
Name: "port-auto-offset",
|
|
Value: 0,
|
|
Usage: "Automatically add an offset (* worker number) to the chosen host port when using `--publish` to map the same container-port from multiple k3d workers to the host",
|
|
},
|
|
cli.StringFlag{
|
|
// TODO: to be deprecated
|
|
Name: "version",
|
|
Usage: "Choose the k3s image version",
|
|
},
|
|
cli.IntFlag{
|
|
// TODO: only --api-port, -a soon since we want to use --port, -p for the --publish/--add-port functionality
|
|
Name: "api-port, a, port, p",
|
|
Value: 6443,
|
|
Usage: "Map the Kubernetes ApiServer port to a local port (Note: --port/-p will be used for arbitrary port mapping as of v2.0.0, use --api-port/-a instead for setting the api port)",
|
|
},
|
|
cli.IntFlag{
|
|
Name: "timeout, t",
|
|
Value: 0,
|
|
Usage: "Set the timeout value when --wait flag is set",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "wait, w",
|
|
Usage: "Wait for the cluster to come up before returning",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "image, i",
|
|
Usage: "Specify a k3s image (Format: <repo>/<image>:<tag>)",
|
|
Value: fmt.Sprintf("%s:%s", defaultK3sImage, version.GetK3sVersion()),
|
|
},
|
|
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)",
|
|
},
|
|
cli.IntFlag{
|
|
Name: "workers",
|
|
Value: 0,
|
|
Usage: "Specify how many worker nodes you want to spawn",
|
|
},
|
|
},
|
|
Action: run.CreateCluster,
|
|
},
|
|
{
|
|
// delete deletes an existing k3s cluster (remove container and cluster directory)
|
|
Name: "delete",
|
|
Aliases: []string{"d", "del"},
|
|
Usage: "Delete cluster",
|
|
Flags: []cli.Flag{
|
|
cli.StringFlag{
|
|
Name: "name, n",
|
|
Value: defaultK3sClusterName,
|
|
Usage: "name of the cluster",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "all, a",
|
|
Usage: "Delete all existing clusters (this ignores the --name/-n flag)",
|
|
},
|
|
},
|
|
Action: run.DeleteCluster,
|
|
},
|
|
{
|
|
// stop stopy a running cluster (its container) so it's restartable
|
|
Name: "stop",
|
|
Usage: "Stop cluster",
|
|
Flags: []cli.Flag{
|
|
cli.StringFlag{
|
|
Name: "name, n",
|
|
Value: defaultK3sClusterName,
|
|
Usage: "Name of the cluster",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "all, a",
|
|
Usage: "Stop all running clusters (this ignores the --name/-n flag)",
|
|
},
|
|
},
|
|
Action: run.StopCluster,
|
|
},
|
|
{
|
|
// start restarts a stopped cluster container
|
|
Name: "start",
|
|
Usage: "Start a stopped cluster",
|
|
Flags: []cli.Flag{
|
|
cli.StringFlag{
|
|
Name: "name, n",
|
|
Value: defaultK3sClusterName,
|
|
Usage: "Name of the cluster",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "all, a",
|
|
Usage: "Start all stopped clusters (this ignores the --name/-n flag)",
|
|
},
|
|
},
|
|
Action: run.StartCluster,
|
|
},
|
|
{
|
|
// list prints a list of created clusters
|
|
Name: "list",
|
|
Aliases: []string{"ls", "l"},
|
|
Usage: "List all clusters",
|
|
Flags: []cli.Flag{
|
|
cli.BoolFlag{
|
|
Name: "all, a",
|
|
Usage: "Also show non-running clusters",
|
|
},
|
|
},
|
|
Action: run.ListClusters,
|
|
},
|
|
{
|
|
// get-kubeconfig grabs the kubeconfig from the cluster and prints the path to it
|
|
Name: "get-kubeconfig",
|
|
Usage: "Get kubeconfig location for cluster",
|
|
Flags: []cli.Flag{
|
|
cli.StringFlag{
|
|
Name: "name, n",
|
|
Value: defaultK3sClusterName,
|
|
Usage: "Name of the cluster",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "all, a",
|
|
Usage: "Get kubeconfig for all clusters (this ignores the --name/-n flag)",
|
|
},
|
|
},
|
|
Action: run.GetKubeConfig,
|
|
},
|
|
}
|
|
|
|
// Global flags
|
|
app.Flags = []cli.Flag{
|
|
cli.BoolFlag{
|
|
Name: "verbose",
|
|
Usage: "Enable verbose output",
|
|
},
|
|
}
|
|
|
|
// run the whole thing
|
|
err := app.Run(os.Args)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|