test unmarshal configspec
Some checks are pending
CI / Lint (push) Waiting to run
CI / Test (push) Waiting to run
CI / End-to-End (push) Waiting to run
CI / Publish Docker (push) Blocked by required conditions
continuous-integration/drone/push Build is passing

This commit is contained in:
2024-09-25 20:48:29 +10:00
parent 3c5aa418df
commit fd64990e8e
3 changed files with 56 additions and 33 deletions

View File

@@ -24,6 +24,8 @@ func (h *Handler) VmModify(w http.ResponseWriter, r *http.Request) {
params := queries.CreateUpdateParams{}
var unixTimestamp int64
//re := regexp.MustCompile(`/([^/]+)/[^/]+\.vmdk$`)
reqBody, err := io.ReadAll(r.Body)
if err != nil {
h.Logger.Error("Invalid data received", "error", err)
@@ -52,7 +54,17 @@ func (h *Handler) VmModify(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusAccepted)
fmt.Fprintf(w, "Processed update event but no config changes were found\n")
} else {
h.Logger.Debug("Received event contains config change info", "source", event.CloudEvent.Source, "vm", event.CloudEvent.Data.VM.Name)
h.Logger.Debug("Received event contains config change info", "source", event.CloudEvent.Source,
"vm", event.CloudEvent.Data.VM.Name, "user_name", event.CloudEvent.Data.UserName)
// Try to decode the config changes data
var testConfig models.ConfigSpec
if err := json.Unmarshal(*event.CloudEvent.Data.ConfigSpec, &testConfig); err != nil {
h.Logger.Warn("unable to decode ConfigSpec json", "error", err)
} else {
h.Logger.Debug("successfully decoded ConfigSpec JSON")
}
configChanges = h.processConfigChanges(event.CloudEvent.Data.ConfigChanges.Modified)
//prettyPrint(configChanges)
@@ -85,6 +97,15 @@ func (h *Handler) VmModify(w http.ResponseWriter, r *http.Request) {
if strings.Contains(change["type"], "config.hardware.device") &&
strings.Contains(event.CloudEvent.Data.FullFormattedMessage, ".vmdk") {
// TODO - query current disk size from Inventory table and only create an update if the size is now changed
if testConfig.DeviceChange != nil {
for i := range testConfig.DeviceChange {
if testConfig.DeviceChange[i].Device.Backing != nil {
h.Logger.Debug("Found backing in configspec", "backing", testConfig.DeviceChange[i].Device.Backing)
}
}
}
// TODO - recalculate total disk size
h.Logger.Debug("Detected config change for VM disk")
found = true

View File

@@ -101,37 +101,9 @@ type ConfigSpec struct {
DeviceChange []struct {
Backing any `json:"Backing"`
Device struct {
Backing struct {
Port struct {
ConnectionCookie int `json:"ConnectionCookie"`
PortKey string `json:"PortKey"`
PortgroupKey string `json:"PortgroupKey"`
SwitchUUID string `json:"SwitchUuid"`
} `json:"Port"`
BackingObjectID string `json:"BackingObjectId"`
ChangeID string `json:"ChangeId"`
ContentID string `json:"ContentId"`
Datastore struct {
Type string `json:"Type"`
Value string `json:"Value"`
} `json:"Datastore"`
DeltaDiskFormat string `json:"DeltaDiskFormat"`
DeltaDiskFormatVariant string `json:"DeltaDiskFormatVariant"`
DeltaGrainSize int `json:"DeltaGrainSize"`
DigestEnabled any `json:"DigestEnabled"`
DiskMode string `json:"DiskMode"`
EagerlyScrub bool `json:"EagerlyScrub"`
FileName string `json:"FileName"`
KeyID any `json:"KeyId"`
Parent any `json:"Parent"`
Sharing string `json:"Sharing"`
Split any `json:"Split"`
ThinProvisioned bool `json:"ThinProvisioned"`
UUID string `json:"Uuid"`
WriteThrough any `json:"WriteThrough"`
} `json:"Backing"`
CapacityInBytes int `json:"CapacityInBytes"`
CapacityInKB int `json:"CapacityInKB"`
Backing *BackingSpec `json:"Backing,omitempty"`
CapacityInBytes int `json:"CapacityInBytes"`
CapacityInKB int `json:"CapacityInKB"`
Connectable struct {
AllowGuestControl bool `json:"AllowGuestControl"`
Connected bool `json:"Connected"`
@@ -173,7 +145,7 @@ type ConfigSpec struct {
} `json:"StorageIOAllocation"`
VDiskID any `json:"VDiskId"`
VFlashCacheConfigInfo any `json:"VFlashCacheConfigInfo"`
} `json:"Device"`
} `json:"Device,omitempty"`
FileOperation string `json:"FileOperation"`
Operation string `json:"Operation"`
Profile []struct {
@@ -243,3 +215,33 @@ type ConfigSpec struct {
VirtualSMCPresent any `json:"VirtualSMCPresent"`
VMProfile any `json:"VmProfile"`
}
type BackingSpec struct {
Port struct {
ConnectionCookie int `json:"ConnectionCookie"`
PortKey string `json:"PortKey"`
PortgroupKey string `json:"PortgroupKey"`
SwitchUUID string `json:"SwitchUuid"`
} `json:"Port"`
BackingObjectID string `json:"BackingObjectId"`
ChangeID string `json:"ChangeId"`
ContentID string `json:"ContentId"`
Datastore struct {
Type string `json:"Type"`
Value string `json:"Value"`
} `json:"Datastore"`
DeltaDiskFormat string `json:"DeltaDiskFormat"`
DeltaDiskFormatVariant string `json:"DeltaDiskFormatVariant"`
DeltaGrainSize int `json:"DeltaGrainSize"`
DigestEnabled any `json:"DigestEnabled"`
DiskMode string `json:"DiskMode"`
EagerlyScrub bool `json:"EagerlyScrub"`
FileName string `json:"FileName"`
KeyID any `json:"KeyId"`
Parent any `json:"Parent"`
Sharing string `json:"Sharing"`
Split any `json:"Split"`
ThinProvisioned bool `json:"ThinProvisioned"`
UUID string `json:"Uuid"`
WriteThrough any `json:"WriteThrough"`
}