summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-10-30 09:14:20 -0500
committerJeff Carr <[email protected]>2024-10-30 09:14:20 -0500
commit020de631c8da1f0dd674c0593acf5d814b713bf3 (patch)
tree5fd87114e484c29726117f3ea03e4b83f3c421bf /main.go
parent7685f0b5ebc217c2489aca4c913d28a01150ad74 (diff)
try to send a create
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'main.go')
-rw-r--r--main.go74
1 files changed, 72 insertions, 2 deletions
diff --git a/main.go b/main.go
index 005478a..45a6bb2 100644
--- a/main.go
+++ b/main.go
@@ -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
+}