create/start/stop/delete, no state yet
This commit is contained in:
parent
3d79811839
commit
d390c16dd1
@ -1,2 +1,3 @@
|
|||||||
# k3d-go
|
# 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"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
func checkTools(c *cli.Context) error {
|
|
||||||
fmt.Println("TEST check")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func createCluster(c *cli.Context) error {
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func deleteCluster(c *cli.Context) error {
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func stopCluster(c *cli.Context) error {
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func startCluster(c *cli.Context) error {
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +90,17 @@ func listClusters(c *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getConfig(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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,10 +109,18 @@ func main() {
|
|||||||
var clusterName string
|
var clusterName string
|
||||||
var serverPort int
|
var serverPort int
|
||||||
var volume string
|
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!"
|
||||||
|
app.Version = "0.0.1"
|
||||||
|
app.Authors = []cli.Author{
|
||||||
|
cli.Author{
|
||||||
|
Name: "iwilltry42",
|
||||||
|
Email: "iwilltry42@gmail.com",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
app.Commands = []cli.Command{
|
app.Commands = []cli.Command{
|
||||||
{
|
{
|
||||||
@ -87,6 +155,12 @@ func main() {
|
|||||||
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,
|
Destination: &volume,
|
||||||
},
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "version",
|
||||||
|
Value: "v0.1.0",
|
||||||
|
Usage: "Choose the k3s image version",
|
||||||
|
Destination: &k3sVersion,
|
||||||
|
},
|
||||||
cli.IntFlag{
|
cli.IntFlag{
|
||||||
Name: "port, p",
|
Name: "port, p",
|
||||||
Value: 6443,
|
Value: 6443,
|
||||||
|
Loading…
Reference in New Issue
Block a user