Skip to content

Commit 5513fcc

Browse files
committed
Create custom array types for VirtualMachineSCSIController and VirtualMachineDisk.
1 parent 645e4fa commit 5513fcc

File tree

2 files changed

+80
-18
lines changed

2 files changed

+80
-18
lines changed

compute/common_contracts.go

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,49 @@ type VirtualMachineCPU struct {
8080

8181
// VirtualMachineSCSIController represents the configuration for a SCSI controller in a virtual machine.
8282
type VirtualMachineSCSIController struct {
83-
ID string `json:"id,omitempty"`
84-
BusNumber int `json:"busNumber"`
85-
Key int `json:"key"`
86-
AdapterType string `json:"adapterType"`
87-
Disks []VirtualMachineDisk `json:"disk"`
88-
State string `json:"state,omitempty"`
83+
ID string `json:"id,omitempty"`
84+
BusNumber int `json:"busNumber"`
85+
Key int `json:"key"`
86+
AdapterType string `json:"adapterType"`
87+
Disks VirtualMachineDisks `json:"disk"`
88+
State string `json:"state,omitempty"`
89+
}
90+
91+
// GetDiskByUnitID retrieves the VirtualMachineDisk (if any) attached to the VirtualMachineSCSIController that matches the specified SCSI logical unit ID.
92+
func (controller *VirtualMachineSCSIController) GetDiskByUnitID(unitID int) *VirtualMachineDisk {
93+
if controller == nil {
94+
return nil
95+
}
96+
97+
return controller.Disks.GetByUnitID(unitID)
98+
}
99+
100+
// GetDiskCount determines the number of VirtualMachineDisk entries contained in the VirtualMachineSCSIControllers.
101+
func (controllers VirtualMachineSCSIControllers) GetDiskCount() (count int) {
102+
for _, controller := range controllers {
103+
count += len(controller.Disks)
104+
}
105+
106+
return
107+
}
108+
109+
// VirtualMachineSCSIControllers is an array of VirtualMachineSCSIController that adds various convenience methods.
110+
type VirtualMachineSCSIControllers []VirtualMachineSCSIController
111+
112+
// GetControllerByBusNumber retrieves the VirtualMachineSCSIController that matches the specified SCSI bus number.
113+
func (controllers VirtualMachineSCSIControllers) GetControllerByBusNumber(busNumber int) *VirtualMachineSCSIController {
114+
for _, controller := range controllers {
115+
if controller.BusNumber == busNumber {
116+
return &controller
117+
}
118+
}
119+
120+
return nil
121+
}
122+
123+
// GetDiskBySCSIPath retrieves the VirtualMachineDisk (if any) attached to a VirtualMachineSCSIController that matches the specified SCSI device path (bus number and unit ID).
124+
func (controllers VirtualMachineSCSIControllers) GetDiskBySCSIPath(busNumber int, unitID int) *VirtualMachineDisk {
125+
return controllers.GetControllerByBusNumber(busNumber).GetDiskByUnitID(unitID)
89126
}
90127

91128
// VirtualMachineDisk represents the configuration for disk in a virtual machine.
@@ -97,6 +134,31 @@ type VirtualMachineDisk struct {
97134
State string `json:"state,omitempty"`
98135
}
99136

137+
// VirtualMachineDisks is an array of VirtualMachineDisk that adds convenience methods.
138+
type VirtualMachineDisks []VirtualMachineDisk
139+
140+
// GetByID retrieves the disk (if any) with the specified Id.
141+
func (disks VirtualMachineDisks) GetByID(id string) *VirtualMachineDisk {
142+
for index := range disks {
143+
if disks[index].ID == id {
144+
return &disks[index]
145+
}
146+
}
147+
148+
return nil
149+
}
150+
151+
// GetByUnitID retrieves the disk (if any) with the specified SCSI unit Id.
152+
func (disks VirtualMachineDisks) GetByUnitID(unitID int) *VirtualMachineDisk {
153+
for index := range disks {
154+
if disks[index].SCSIUnitID == unitID {
155+
return &disks[index]
156+
}
157+
}
158+
159+
return nil
160+
}
161+
100162
// VirtualMachineNetwork represents the networking configuration for a virtual machine.
101163
type VirtualMachineNetwork struct {
102164
NetworkDomainID string `json:"networkDomainId,omitempty"`

compute/servers.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,18 @@ const (
3838

3939
// Server represents a virtual machine.
4040
type Server struct {
41-
ID string `json:"id"`
42-
Name string `json:"name"`
43-
Description string `json:"description"`
44-
OperatingSystem OperatingSystem `json:"operatingSystem"`
45-
CPU VirtualMachineCPU `json:"cpu"`
46-
MemoryGB int `json:"memoryGb"`
47-
SCSIControllers []VirtualMachineSCSIController `json:"scsiController"`
48-
Network VirtualMachineNetwork `json:"networkInfo"`
49-
SourceImageID string `json:"sourceImageId"`
50-
State string `json:"state"`
51-
Deployed bool `json:"deployed"`
52-
Started bool `json:"started"`
41+
ID string `json:"id"`
42+
Name string `json:"name"`
43+
Description string `json:"description"`
44+
OperatingSystem OperatingSystem `json:"operatingSystem"`
45+
CPU VirtualMachineCPU `json:"cpu"`
46+
MemoryGB int `json:"memoryGb"`
47+
SCSIControllers VirtualMachineSCSIControllers `json:"scsiController"`
48+
Network VirtualMachineNetwork `json:"networkInfo"`
49+
SourceImageID string `json:"sourceImageId"`
50+
State string `json:"state"`
51+
Deployed bool `json:"deployed"`
52+
Started bool `json:"started"`
5353
}
5454

5555
// GetID returns the server's Id.

0 commit comments

Comments
 (0)