diff --git a/server/handler/vmModifyEvent.go b/server/handler/vmModifyEvent.go index 600b7b9..c09c8a6 100644 --- a/server/handler/vmModifyEvent.go +++ b/server/handler/vmModifyEvent.go @@ -106,16 +106,18 @@ func (h *Handler) VmModifyEvent(w http.ResponseWriter, r *http.Request) { params.UpdateType = "reconfigure" } case "config.managedBy": // This changes when a VM becomes a placeholder or vice versa - if change["newValue"] == "(extensionKey = \"com.vmware.vcDr\", type = \"placeholderVm\")" { params.PlaceholderChange = sql.NullString{String: "placeholderVm", Valid: true} + h.Logger.Debug("placeholderVm") changeFound = true params.UpdateType = "srm" } else if change["newValue"] == "" { params.PlaceholderChange = sql.NullString{String: "Vm", Valid: true} + h.Logger.Debug("vm") changeFound = true params.UpdateType = "srm" } else if change["newValue"] == "testVm" { + h.Logger.Debug("testVm") params.PlaceholderChange = sql.NullString{String: "testVm", Valid: true} changeFound = true params.UpdateType = "srm" @@ -217,15 +219,15 @@ func (h *Handler) VmModifyEvent(w http.ResponseWriter, r *http.Request) { // TODO Add a record to the inventory table for this VM h.Logger.Info("Received VM modify event for a VM not currently in the inventory. Adding to inventory") - iid, err := h.AddVmToInventory(event, ctx, unixTimestamp) - if err != nil { - h.Logger.Error("Received error adding VM to inventory", "error", err) + iid, err2 := h.AddVmToInventory(event, ctx, unixTimestamp) + if err2 != nil { + h.Logger.Error("Received error adding VM to inventory", "error", err2) w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusInternalServerError) json.NewEncoder(w).Encode(map[string]string{ "status": "ERROR", "message": fmt.Sprintf("Valid request but experienced error adding vm id '%s' in datacenter name '%s' to inventory table : %s", - event.CloudEvent.Data.VM.VM.Value, event.CloudEvent.Data.Datacenter.Name, err), + event.CloudEvent.Data.VM.VM.Value, event.CloudEvent.Data.Datacenter.Name, err2), }) return } diff --git a/server/handler/vmMoveEvent.go b/server/handler/vmMoveEvent.go index c3ad50c..b11f033 100644 --- a/server/handler/vmMoveEvent.go +++ b/server/handler/vmMoveEvent.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -66,8 +67,39 @@ func (h *Handler) VmMoveEvent(w http.ResponseWriter, r *http.Request) { invResult, err := h.Database.Queries().GetInventoryVmId(ctx, invParams) if err != nil { + // If a VM is being moved it must exist, so lets add an inventory record for this VM h.Logger.Error("unable to find existing inventory record for this VM", "error", err) - // TODO - how to handle? + if errors.Is(err, sql.ErrNoRows) { + // Add a record to the inventory table for this VM + h.Logger.Info("Received VM modify event for a VM not currently in the inventory. Adding to inventory") + + iid, err2 := h.AddVmToInventory(event, ctx, unixTimestamp) + if err2 != nil { + h.Logger.Error("Received error adding VM to inventory", "error", err2) + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusInternalServerError) + json.NewEncoder(w).Encode(map[string]string{ + "status": "ERROR", + "message": fmt.Sprintf("Valid request but experienced error adding vm id '%s' in datacenter name '%s' to inventory table : %s", + event.CloudEvent.Data.VM.VM.Value, event.CloudEvent.Data.Datacenter.Name, err2), + }) + return + } + + if iid > 0 { + params.InventoryId = sql.NullInt64{Int64: iid, Valid: iid > 0} + } else { + h.Logger.Error("Received zero for inventory id when adding VM to inventory") + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusInternalServerError) + json.NewEncoder(w).Encode(map[string]string{ + "status": "ERROR", + "message": fmt.Sprintf("Valid request but received zero result when adding vm id '%s' in datacenter name '%s' to inventory table", + event.CloudEvent.Data.VM.VM.Value, event.CloudEvent.Data.Datacenter.Name), + }) + return + } + } } else { params.InventoryId = sql.NullInt64{Int64: invResult.Iid, Valid: invResult.Iid > 0} }