create/start/stop/delete, no state yet

pull/1/head
iwilltry42 6 years ago
parent 3d79811839
commit d390c16dd1
  1. 3
      README.md
  2. 94
      main.go

@ -1,2 +1,3 @@
# k3d-go
https://github.com/zeerorg/k3s-in-docker reimplemented in Golang
[zeerorg/k3s-in-docker](https://github.com/zeerorg/k3s-in-docker) reimplemented in Golang... just because I didn't have time to learn Rust.

@ -9,28 +9,78 @@ import (
"github.com/urfave/cli"
)
func checkTools(c *cli.Context) error {
fmt.Println("TEST check")
return nil
}
func createCluster(c *cli.Context) error {
fmt.Println("TEST create")
port := fmt.Sprintf("%s:%s", c.String("port"), c.String("port"))
image := fmt.Sprintf("rancher/k3s:%s", c.String("version"))
cmd := "docker"
args := []string{
"run",
"--name", c.String("name"),
"-e", "K3S_KUBECONFIG_OUTPUT=/output/kubeconfig.yaml",
"--publish", port,
"--privileged",
}
extraArgs := []string{}
if c.IsSet("volume") {
extraArgs = append(extraArgs, fmt.Sprintf("--volume %s", c.String("volume")))
}
if len(extraArgs) > 0 {
for _, extra := range extraArgs {
args = append(args, extra)
}
}
args = append(args,
"-d",
image,
"server", // cmd
"--https-listen-port", c.String("port"), //args
)
log.Printf("Creating cluster [%s]", c.String("name"))
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args)
if err := exec.Command(cmd, args...).Run(); err != nil {
log.Fatalf("FAILURE: couldn't create cluster [%s] Err: %+v", c.String("name"), err)
return err
}
log.Printf("SUCCESS: created cluster [%s]", c.String("name"))
return nil
}
func deleteCluster(c *cli.Context) error {
fmt.Println("TEST delete")
cmd := "docker"
args := []string{"rm", "-f", c.String("name")}
log.Printf("Deleting cluster [%s]", c.String("name"))
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args)
if err := exec.Command(cmd, args...).Run(); err != nil {
log.Fatalf("FAILURE: couldn't delete cluster [%s] Err: %+v", c.String("name"), err)
return err
}
log.Printf("SUCCESS: deleted cluster [%s]", c.String("name"))
return nil
}
func stopCluster(c *cli.Context) error {
fmt.Println("TEST stop")
cmd := "docker"
args := []string{"stop", c.String("name")}
log.Printf("Stopping cluster [%s]", c.String("name"))
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args)
if err := exec.Command(cmd, args...).Run(); err != nil {
log.Fatalf("FAILURE: couldn't stop cluster [%s] Err: %+v", c.String("name"), err)
return err
}
log.Printf("SUCCESS: stopped cluster [%s]", c.String("name"))
return nil
}
func startCluster(c *cli.Context) error {
fmt.Println("TEST start")
cmd := "docker"
args := []string{"start", c.String("name")}
log.Printf("Starting cluster [%s]", c.String("name"))
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args)
if err := exec.Command(cmd, args...).Run(); err != nil {
log.Fatalf("FAILURE: couldn't start cluster [%s] Err: %+v", c.String("name"), err)
return err
}
log.Printf("SUCCESS: started cluster [%s]", c.String("name"))
return nil
}
@ -40,7 +90,17 @@ func listClusters(c *cli.Context) error {
}
func getConfig(c *cli.Context) error {
fmt.Println("TEST get")
sourcePath := fmt.Sprintf("%s:/output/kubeconfig.yaml", c.String("name"))
destPath := fmt.Sprintf("./kubeconfig-%s.yaml", c.String("name"))
cmd := "docker"
args := []string{"cp", sourcePath, destPath}
log.Printf("Grabbing kubeconfig for cluster [%s]", c.String("name"))
log.Printf("Running command: %+v", exec.Command(cmd, args...).Args)
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)
return err
}
log.Printf("SUCCESS: retrieved kubeconfig for cluster [%s]", c.String("name"))
return nil
}
@ -49,10 +109,18 @@ func main() {
var clusterName string
var serverPort int
var volume string
var k3sVersion string
app := cli.NewApp()
app.Name = "k3d"
app.Usage = "Run k3s in Docker!"
app.Version = "0.0.1"
app.Authors = []cli.Author{
cli.Author{
Name: "iwilltry42",
Email: "iwilltry42@gmail.com",
},
}
app.Commands = []cli.Command{
{
@ -87,6 +155,12 @@ func main() {
Usage: "Mount a volume into the cluster node (Docker notation: `source:destination`",
Destination: &volume,
},
cli.StringFlag{
Name: "version",
Value: "v0.1.0",
Usage: "Choose the k3s image version",
Destination: &k3sVersion,
},
cli.IntFlag{
Name: "port, p",
Value: 6443,

Loading…
Cancel
Save