|
|
@ -10,6 +10,7 @@ import ( |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
func createCluster(c *cli.Context) error { |
|
|
|
func createCluster(c *cli.Context) error { |
|
|
|
|
|
|
|
createClusterDir(c.String("name")) |
|
|
|
port := fmt.Sprintf("%s:%s", c.String("port"), c.String("port")) |
|
|
|
port := fmt.Sprintf("%s:%s", c.String("port"), c.String("port")) |
|
|
|
image := fmt.Sprintf("rancher/k3s:%s", c.String("version")) |
|
|
|
image := fmt.Sprintf("rancher/k3s:%s", c.String("version")) |
|
|
|
cmd := "docker" |
|
|
|
cmd := "docker" |
|
|
@ -38,7 +39,7 @@ func createCluster(c *cli.Context) error { |
|
|
|
log.Printf("Creating cluster [%s]", c.String("name")) |
|
|
|
log.Printf("Creating cluster [%s]", c.String("name")) |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
log.Fatalf("FAILURE: couldn't create cluster [%s] Err: %+v", c.String("name"), err) |
|
|
|
log.Fatalf("FAILURE: couldn't create cluster [%s] -> %+v", c.String("name"), err) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
log.Printf("SUCCESS: created cluster [%s]", c.String("name")) |
|
|
|
log.Printf("SUCCESS: created cluster [%s]", c.String("name")) |
|
|
@ -55,10 +56,11 @@ func deleteCluster(c *cli.Context) error { |
|
|
|
args = append(args, "-f") |
|
|
|
args = append(args, "-f") |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
log.Fatalf("FAILURE: couldn't delete cluster [%s] Err: %+v", c.String("name"), err) |
|
|
|
log.Fatalf("FAILURE: couldn't delete cluster [%s] -> %+v", c.String("name"), err) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
deleteClusterDir(c.String("name")) |
|
|
|
log.Printf("SUCCESS: deleted cluster [%s]", c.String("name")) |
|
|
|
log.Printf("SUCCESS: deleted cluster [%s]", c.String("name")) |
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
@ -69,7 +71,7 @@ func stopCluster(c *cli.Context) error { |
|
|
|
log.Printf("Stopping cluster [%s]", c.String("name")) |
|
|
|
log.Printf("Stopping cluster [%s]", c.String("name")) |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
log.Fatalf("FAILURE: couldn't stop cluster [%s] Err: %+v", c.String("name"), err) |
|
|
|
log.Fatalf("FAILURE: couldn't stop cluster [%s] -> %+v", c.String("name"), err) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
log.Printf("SUCCESS: stopped cluster [%s]", c.String("name")) |
|
|
|
log.Printf("SUCCESS: stopped cluster [%s]", c.String("name")) |
|
|
@ -82,7 +84,7 @@ func startCluster(c *cli.Context) error { |
|
|
|
log.Printf("Starting cluster [%s]", c.String("name")) |
|
|
|
log.Printf("Starting cluster [%s]", c.String("name")) |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
log.Fatalf("FAILURE: couldn't start cluster [%s] Err: %+v", c.String("name"), err) |
|
|
|
log.Fatalf("FAILURE: couldn't start cluster [%s] -> %+v", c.String("name"), err) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
log.Printf("SUCCESS: started cluster [%s]", c.String("name")) |
|
|
|
log.Printf("SUCCESS: started cluster [%s]", c.String("name")) |
|
|
@ -90,19 +92,19 @@ func startCluster(c *cli.Context) error { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func listClusters(c *cli.Context) error { |
|
|
|
func listClusters(c *cli.Context) error { |
|
|
|
fmt.Println("TEST list") |
|
|
|
listClusterDirs() |
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func getConfig(c *cli.Context) error { |
|
|
|
func getKubeConfig(c *cli.Context) error { |
|
|
|
sourcePath := fmt.Sprintf("%s:/output/kubeconfig.yaml", c.String("name")) |
|
|
|
sourcePath := fmt.Sprintf("%s:/output/kubeconfig.yaml", c.String("name")) |
|
|
|
destPath := fmt.Sprintf("./kubeconfig-%s.yaml", c.String("name")) |
|
|
|
destPath, _ := getClusterDir(c.String("name")) |
|
|
|
cmd := "docker" |
|
|
|
cmd := "docker" |
|
|
|
args := []string{"cp", sourcePath, destPath} |
|
|
|
args := []string{"cp", sourcePath, destPath} |
|
|
|
log.Printf("Grabbing kubeconfig for cluster [%s]", c.String("name")) |
|
|
|
log.Printf("Grabbing kubeconfig for cluster [%s]", c.String("name")) |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args) |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
if err := exec.Command(cmd, args...).Run(); err != nil { |
|
|
|
log.Fatalf("FAILURE: couldn't get kubeconfig for cluster [%s] Err: %+v", c.String("name"), err) |
|
|
|
log.Fatalf("FAILURE: couldn't get kubeconfig for cluster [%s] -> %+v", c.String("name"), err) |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
log.Printf("SUCCESS: retrieved kubeconfig for cluster [%s]", c.String("name")) |
|
|
|
log.Printf("SUCCESS: retrieved kubeconfig for cluster [%s]", c.String("name")) |
|
|
@ -111,11 +113,6 @@ func getConfig(c *cli.Context) error { |
|
|
|
|
|
|
|
|
|
|
|
func main() { |
|
|
|
func main() { |
|
|
|
|
|
|
|
|
|
|
|
var clusterName string |
|
|
|
|
|
|
|
var serverPort int |
|
|
|
|
|
|
|
var volume string |
|
|
|
|
|
|
|
var k3sVersion string |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app := cli.NewApp() |
|
|
|
app := cli.NewApp() |
|
|
|
app.Name = "k3d" |
|
|
|
app.Name = "k3d" |
|
|
|
app.Usage = "Run k3s in Docker!" |
|
|
|
app.Usage = "Run k3s in Docker!" |
|
|
@ -133,6 +130,7 @@ func main() { |
|
|
|
Aliases: []string{"ct"}, |
|
|
|
Aliases: []string{"ct"}, |
|
|
|
Usage: "Check if docker is running", |
|
|
|
Usage: "Check if docker is running", |
|
|
|
Action: func(c *cli.Context) error { |
|
|
|
Action: func(c *cli.Context) error { |
|
|
|
|
|
|
|
//TODO: own function with version check
|
|
|
|
log.Print("Checking docker...") |
|
|
|
log.Print("Checking docker...") |
|
|
|
cmd := "docker" |
|
|
|
cmd := "docker" |
|
|
|
args := []string{"version"} |
|
|
|
args := []string{"version"} |
|
|
@ -150,27 +148,23 @@ func main() { |
|
|
|
Usage: "Create a single node k3s cluster in a container", |
|
|
|
Usage: "Create a single node k3s cluster in a container", |
|
|
|
Flags: []cli.Flag{ |
|
|
|
Flags: []cli.Flag{ |
|
|
|
cli.StringFlag{ |
|
|
|
cli.StringFlag{ |
|
|
|
Name: "name, n", |
|
|
|
Name: "name, n", |
|
|
|
Value: "k3s_default", |
|
|
|
Value: "k3s_default", |
|
|
|
Usage: "Set a name for the cluster", |
|
|
|
Usage: "Set a name for the cluster", |
|
|
|
Destination: &clusterName, |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
cli.StringFlag{ |
|
|
|
cli.StringFlag{ |
|
|
|
Name: "volume, v", |
|
|
|
Name: "volume, v", |
|
|
|
Usage: "Mount a volume into the cluster node (Docker notation: `source:destination`", |
|
|
|
Usage: "Mount a volume into the cluster node (Docker notation: `source:destination`", |
|
|
|
Destination: &volume, |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
cli.StringFlag{ |
|
|
|
cli.StringFlag{ |
|
|
|
Name: "version", |
|
|
|
Name: "version", |
|
|
|
Value: "v0.1.0", |
|
|
|
Value: "v0.1.0", |
|
|
|
Usage: "Choose the k3s image version", |
|
|
|
Usage: "Choose the k3s image version", |
|
|
|
Destination: &k3sVersion, |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
cli.IntFlag{ |
|
|
|
cli.IntFlag{ |
|
|
|
Name: "port, p", |
|
|
|
Name: "port, p", |
|
|
|
Value: 6443, |
|
|
|
Value: 6443, |
|
|
|
Usage: "Set a port on which the ApiServer will listen", |
|
|
|
Usage: "Set a port on which the ApiServer will listen", |
|
|
|
Destination: &serverPort, |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
Action: createCluster, |
|
|
|
Action: createCluster, |
|
|
@ -181,10 +175,9 @@ func main() { |
|
|
|
Usage: "Delete cluster", |
|
|
|
Usage: "Delete cluster", |
|
|
|
Flags: []cli.Flag{ |
|
|
|
Flags: []cli.Flag{ |
|
|
|
cli.StringFlag{ |
|
|
|
cli.StringFlag{ |
|
|
|
Name: "name, n", |
|
|
|
Name: "name, n", |
|
|
|
Value: "k3s_default", |
|
|
|
Value: "k3s_default", |
|
|
|
Usage: "name of the cluster", |
|
|
|
Usage: "name of the cluster", |
|
|
|
Destination: &clusterName, |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
Action: deleteCluster, |
|
|
|
Action: deleteCluster, |
|
|
@ -194,10 +187,9 @@ func main() { |
|
|
|
Usage: "Stop cluster", |
|
|
|
Usage: "Stop cluster", |
|
|
|
Flags: []cli.Flag{ |
|
|
|
Flags: []cli.Flag{ |
|
|
|
cli.StringFlag{ |
|
|
|
cli.StringFlag{ |
|
|
|
Name: "name, n", |
|
|
|
Name: "name, n", |
|
|
|
Value: "k3s_default", |
|
|
|
Value: "k3s_default", |
|
|
|
Usage: "name of the cluster", |
|
|
|
Usage: "name of the cluster", |
|
|
|
Destination: &clusterName, |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
Action: func(c *cli.Context) error { |
|
|
|
Action: func(c *cli.Context) error { |
|
|
@ -210,10 +202,9 @@ func main() { |
|
|
|
Usage: "Start a stopped cluster", |
|
|
|
Usage: "Start a stopped cluster", |
|
|
|
Flags: []cli.Flag{ |
|
|
|
Flags: []cli.Flag{ |
|
|
|
cli.StringFlag{ |
|
|
|
cli.StringFlag{ |
|
|
|
Name: "name, n", |
|
|
|
Name: "name, n", |
|
|
|
Value: "k3s_default", |
|
|
|
Value: "k3s_default", |
|
|
|
Usage: "name of the cluster", |
|
|
|
Usage: "name of the cluster", |
|
|
|
Destination: &clusterName, |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
Action: func(c *cli.Context) error { |
|
|
|
Action: func(c *cli.Context) error { |
|
|
@ -222,22 +213,18 @@ func main() { |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
Name: "list", |
|
|
|
Name: "list", |
|
|
|
Usage: "List all clusters", |
|
|
|
Usage: "List all clusters", |
|
|
|
Action: func(c *cli.Context) error { |
|
|
|
Action: listClusters, |
|
|
|
fmt.Println("Listing clusters") |
|
|
|
|
|
|
|
return nil |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
Name: "get-config", |
|
|
|
Name: "get-kubeconfig", |
|
|
|
Usage: "Get kubeconfig location for cluster", |
|
|
|
Usage: "Get kubeconfig location for cluster", |
|
|
|
Flags: []cli.Flag{ |
|
|
|
Flags: []cli.Flag{ |
|
|
|
cli.StringFlag{ |
|
|
|
cli.StringFlag{ |
|
|
|
Name: "name, n", |
|
|
|
Name: "name, n", |
|
|
|
Value: "k3s_default", |
|
|
|
Value: "k3s_default", |
|
|
|
Usage: "name of the cluster", |
|
|
|
Usage: "name of the cluster", |
|
|
|
Destination: &clusterName, |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
Action: func(c *cli.Context) error { |
|
|
|
Action: func(c *cli.Context) error { |
|
|
|