diff options
| author | Jeff Carr <[email protected]> | 2025-06-04 01:34:36 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-06-04 06:29:49 -0500 |
| commit | bf01596f307ada684019ab863b4c447855c465b5 (patch) | |
| tree | 898a7016baa1e7e0158d029c966c4f543552f036 | |
| parent | d261a220dff941701ed4e55faec8fe096d0d8f5d (diff) | |
first droplet create (the protobuf anyway)
| -rw-r--r-- | doDroplet.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/doDroplet.go b/doDroplet.go index e39d110..adba47c 100644 --- a/doDroplet.go +++ b/doDroplet.go @@ -11,6 +11,7 @@ import ( "net/url" "time" + "github.com/google/uuid" "go.wit.com/lib/protobuf/virtpb" "go.wit.com/log" ) @@ -123,6 +124,26 @@ func doEvent(e *virtpb.Event) *virtpb.Event { return result } + if e.Etype == virtpb.EventType_ADD { + log.Println("START ADD droplet event", e.Droplet.FormatTEXT()) + if e.Droplet == nil { + result.State = virtpb.Event_FAIL + return result + } + result.DropletName = e.Droplet.Hostname + result.Error = e.Droplet.FormatTEXT() // feedback to the other side for debugging + if e.Droplet != nil { + if err := createDroplet(e.Droplet, result); err != nil { + result.Error += fmt.Sprintf("createDroplet() err: %v", err) + result.State = virtpb.Event_FAIL + return result + } + } + log.Println("create droplet worked", e.Droplet.FormatTEXT()) + result.State = virtpb.Event_DONE + return result + } + log.Println("unknown event", e) result.Etype = e.Etype result.State = virtpb.Event_FAIL @@ -178,3 +199,48 @@ func updateDroplet(newd *virtpb.Droplet) *virtpb.Event { result.State = virtpb.Event_DONE return result } + +func createDroplet(newd *virtpb.Droplet, result *virtpb.Event) error { + if newd == nil { + return fmt.Errorf("droplet protobuf == nil") + } + + if newd.Uuid == "" { + newd.Uuid = uuid.New().String() + } + + d := me.cluster.FindDropletByUuid(newd.Uuid) + if d != nil { + return fmt.Errorf("droplet uuid already used") + } + + log.Println("found droplet to update:", newd.Uuid, newd.Hostname, newd.Cpus, newd.Memory) + + if newd.Hostname == "" { + return fmt.Errorf("Hostname can not be blank") + } + d = me.cluster.FindDropletByName(newd.Hostname) + if d != nil { + return fmt.Errorf("hostname already defined") + } + + newd.LocalOnly = "yes on: " + "farm03" + + // by default, on locally imported domains, set the preferred hypervisor! + newd.PreferredHypervisor = "farm03" + + newd.Current = new(virtpb.Current) + newd.Current.Hypervisor = "farm03" + newd.StartState = virtpb.DropletState_OFF + newd.Current.State = virtpb.DropletState_OFF + + me.cluster.AddDroplet(newd) + + if err := me.cluster.ConfigSave(); err != nil { + log.Info("configsave error", err) + return fmt.Errorf("ConfigSave() error: %v", err) + } + + result.State = virtpb.Event_DONE + return nil +} |
