create/start/stop/delete, no state yet
This commit is contained in:
parent
3d79811839
commit
d390c16dd1
@ -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.
|
||||
|
94
main.go
94
main.go
@ -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…
Reference in New Issue
Block a user