diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 74 |
1 files changed, 72 insertions, 2 deletions
@@ -5,9 +5,13 @@ package main import ( "embed" "os" + "path/filepath" + "strings" + "errors" "go.wit.com/dev/alexflint/arg" "go.wit.com/log" + pb "go.wit.com/lib/protobuf/virtbuf" ) var Version string @@ -15,6 +19,8 @@ var Version string //go:embed resources/* var resources embed.FS +var urlbase string = "http://localhost:8080" + func main() { var pp *arg.Parser pp = arg.MustParse(&argv) @@ -25,14 +31,20 @@ func main() { } if argv.Dump != nil { if argv.Dump.Droplets { - log.Info("dump droplets here ==", argv.Dump.Droplets) + dumpDroplets() os.Exit(0) } log.Info("dump something here") os.Exit(0) } if argv.Create != nil { - log.Info("create something here") + dir := filepath.Dir(argv.Create.Filename) + filename := filepath.Base(argv.Create.Filename) + if err := createFilename(dir, filename); err != nil { + log.Info("create failed", err) + os.Exit(-1) + } + log.Info("create worked") os.Exit(0) } if argv.Start != nil { @@ -40,3 +52,61 @@ func main() { os.Exit(0) } } + +func dumpDroplets() error { + log.DaemonMode(true) + log.Info("dump droplets here ==", argv.Dump.Droplets) + url := urlbase + "/dumpdroplets" + body, err := httpPost(url, nil) + if err != nil { + log.Info("httpPost() failed:", err) + return err + } + + test := strings.TrimSpace(string(body)) + // log.Info("virtigo returned body:", test) + for _, line := range strings.Split(test, "\n") { + log.Info("GOT:", line) + } + return nil +} + +func createFilename(dir string, filename string) error { + log.Info("dir ==", dir) + log.Info("filename ==", filename) + + filetype := filepath.Ext(filename) + if filetype != ".qcow2" { + log.Info("file type", filetype, "not supported") + return errors.New("only supporting qcow2 images for now") + } + hostname := strings.TrimSuffix(filename, filetype) + log.Info("hostname ==", hostname) + + var newDroplet *pb.Droplet + newDroplet = new(pb.Droplet) + newDroplet.Hostname = hostname + newDisk := new(pb.Disk) + newDisk.Filename = filename + newDisk.Filepath = dir + + bytes, err := newDroplet.MarshalJSON() + if err != nil { + log.Info("virtbuf.MarshalJson() failed:", err) + return err + } + + url := urlbase + "/create" + body, err := httpPost(url, bytes) + if err != nil { + log.Info("httpPost() failed:", err) + return err + } + + test := strings.TrimSpace(string(body)) + // log.Info("virtigo returned body:", test) + for _, line := range strings.Split(test, "\n") { + log.Info("GOT:", line) + } + return nil +} |
