first droplet create (the protobuf anyway)

This commit is contained in:
Jeff Carr 2025-06-04 01:34:36 -05:00
parent d261a220df
commit bf01596f30
1 changed files with 66 additions and 0 deletions

View File

@ -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
}