summaryrefslogtreecommitdiff
path: root/doDroplet.go
diff options
context:
space:
mode:
Diffstat (limited to 'doDroplet.go')
-rw-r--r--doDroplet.go66
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
+}