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