Inspired by the docker CLI, --publish take same input as docker CLI and provides similar functions. For the k3s cluster server node, it behaves the same as docker cli; it exports the k3d server ports to the host ports. Handling for worker nodes will be added in the subsequent patches. This option can be used mutiple times for exposing more ports. --add-port is an alias to this option.
195 lines
4.6 KiB
Go
195 lines
4.6 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
run "github.com/rancher/k3d/cli"
|
|
"github.com/rancher/k3d/version"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
// 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: "k3s_default",
|
|
Usage: "Set a name for the cluster",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "volume, v",
|
|
Usage: "Mount one or more volumes into every node of the cluster (Docker notation: `source:destination[,source:destination]`)",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "publish, add-port",
|
|
Usage: "publish k3s node ports to the host (Docker notation: `ip:public:private/proto`, use multiple options to expose more ports)",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "version",
|
|
Value: version.GetK3sVersion(),
|
|
Usage: "Choose the k3s image version",
|
|
},
|
|
cli.IntFlag{
|
|
Name: "port, p",
|
|
Value: 6443,
|
|
Usage: "Map the Kubernetes ApiServer port to a local 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.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: "k3s_default",
|
|
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: "k3s_default",
|
|
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: "k3s_default",
|
|
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: "k3s_default",
|
|
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)
|
|
}
|
|
}
|