diff --git a/rest-api/api/pkg/api/handler/instancebatch.go b/rest-api/api/pkg/api/handler/instancebatch.go index c913c26c4b..5a26e1f464 100644 --- a/rest-api/api/pkg/api/handler/instancebatch.go +++ b/rest-api/api/pkg/api/handler/instancebatch.go @@ -2016,7 +2016,7 @@ func allocateMachinesForBatch( // Returns empty string if the machine has no NVLink domain information. func getNVLinkDomainID(machine *cdbm.Machine) string { if machine.Metadata != nil { - if nvlinkInfo := machine.Metadata.GetNvlinkInfo(); nvlinkInfo != nil { + if nvlinkInfo := machine.Metadata.GetStatus().GetNvlinkInfo(); nvlinkInfo != nil { if domainUuid := nvlinkInfo.GetDomainUuid(); domainUuid != nil { return domainUuid.GetValue() } diff --git a/rest-api/api/pkg/api/handler/instancebatch_test.go b/rest-api/api/pkg/api/handler/instancebatch_test.go index 014a6d4bab..a0edcb737d 100644 --- a/rest-api/api/pkg/api/handler/instancebatch_test.go +++ b/rest-api/api/pkg/api/handler/instancebatch_test.go @@ -46,9 +46,11 @@ func testBatchBuildMachineWithNVLinkDomain(t *testing.T, dbSession *cdb.Session, mc := testInstanceBuildMachine(t, dbSession, ip, site, cutil.GetPtr(false), nil) mc.Metadata = &cdbm.SiteControllerMachine{ Machine: &corev1.Machine{ - NvlinkInfo: &corev1.MachineNVLinkInfo{ - DomainUuid: &corev1.NVLinkDomainId{ - Value: nvlinkDomainID, + Status: &corev1.MachineStatus{ + NvlinkInfo: &corev1.MachineNVLinkInfo{ + DomainUuid: &corev1.NVLinkDomainId{ + Value: nvlinkDomainID, + }, }, }, }, diff --git a/rest-api/api/pkg/api/model/dpumachine.go b/rest-api/api/pkg/api/model/dpumachine.go index df52a54711..9bd1fc6d58 100644 --- a/rest-api/api/pkg/api/model/dpumachine.go +++ b/rest-api/api/pkg/api/model/dpumachine.go @@ -487,14 +487,15 @@ func (apd *APIDpuMachine) FromProto(protoDpuMachine *corev1.DpuMachine, ctx APID if protoMachine == nil { return } + protoMachineStatus := protoMachine.GetStatus() apd.ID = protoMachine.GetId().GetId() apd.InfrastructureProviderID = ctx.InfrastructureProviderID.String() apd.SiteID = ctx.SiteID.String() apd.HostMachineID = ctx.HostMachineID - if protoMachine.DpuAgentVersion != nil { - apd.DpuAgentVersion = *protoMachine.DpuAgentVersion + if protoMachineStatus != nil && protoMachineStatus.DpuAgentVersion != nil { + apd.DpuAgentVersion = *protoMachineStatus.DpuAgentVersion } if protoMachine.BmcInfo != nil { @@ -502,14 +503,14 @@ func (apd *APIDpuMachine) FromProto(protoDpuMachine *corev1.DpuMachine, ctx APID apd.BMCInfo.FromProto(protoMachine.BmcInfo) } - if protoMachine.DiscoveryInfo != nil && protoMachine.DiscoveryInfo.DmiData != nil { + if protoMachineStatus.GetDiscoveryInfo() != nil && protoMachineStatus.GetDiscoveryInfo().DmiData != nil { apd.DMIData = &APIDMIData{} - apd.DMIData.FromProto(protoMachine.DiscoveryInfo.DmiData) + apd.DMIData.FromProto(protoMachineStatus.GetDiscoveryInfo().DmiData) } - if protoMachine.Interfaces != nil { - apd.Interfaces = make([]APIDpuMachineInterface, 0, len(protoMachine.Interfaces)) - for _, protoInterface := range protoMachine.Interfaces { + if protoMachineStatus.GetInterfaces() != nil { + apd.Interfaces = make([]APIDpuMachineInterface, 0, len(protoMachineStatus.GetInterfaces())) + for _, protoInterface := range protoMachineStatus.GetInterfaces() { if protoInterface != nil { apdInterface := APIDpuMachineInterface{} apdInterface.FromProto(protoInterface) @@ -530,9 +531,9 @@ func (apd *APIDpuMachine) FromProto(protoDpuMachine *corev1.DpuMachine, ctx APID } } - if protoMachine.Health != nil { + if protoMachineStatus.GetHealth() != nil { apd.Health = &APIMachineHealth{} - apd.Health.FromProto(protoMachine.Health) + apd.Health.FromProto(protoMachineStatus.GetHealth()) } var labels cdbm.Labels @@ -546,8 +547,8 @@ func (apd *APIDpuMachine) FromProto(protoDpuMachine *corev1.DpuMachine, ctx APID apd.DpuNetworkConfig.FromProto(protoDpuMachine.DpuNetworkConfig) } - if protoMachine.LastRebootTime != nil { - lastRebooted := protoMachine.LastRebootTime.AsTime() + if protoMachineStatus.GetLastRebootTime() != nil { + lastRebooted := protoMachineStatus.GetLastRebootTime().AsTime() apd.LastRebooted = &lastRebooted } diff --git a/rest-api/api/pkg/api/model/dpumachine_test.go b/rest-api/api/pkg/api/model/dpumachine_test.go index f713bf8b60..ab157ab4cf 100644 --- a/rest-api/api/pkg/api/model/dpumachine_test.go +++ b/rest-api/api/pkg/api/model/dpumachine_test.go @@ -9,6 +9,7 @@ import ( "github.com/google/uuid" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "google.golang.org/protobuf/types/known/timestamppb" cutil "github.com/NVIDIA/infra-controller/rest-api/common/pkg/util" @@ -29,30 +30,54 @@ func TestAPIDpuMachine_FromProto(t *testing.T) { Id: &corev1.MachineId{ Id: "test-machine-id", }, - DpuAgentVersion: cutil.GetPtr("1.0.0"), - BmcInfo: &corev1.BmcInfo{ - Ip: cutil.GetPtr("10.0.0.1"), - }, - DiscoveryInfo: &corev1.DiscoveryInfo{ - DmiData: &corev1.DmiData{ - BoardName: "test-board-name", - BoardSerial: "test-board-serial", - BoardVersion: "test-board-version", - BiosDate: "test-bios-date", - BiosVersion: "test-bios-version", - ProductSerial: "test-product-serial", - ChassisSerial: "test-chassis-serial", - ProductName: "test-product-name", - SysVendor: "test-sys-vendor", + Status: &corev1.MachineStatus{ + DpuAgentVersion: cutil.GetPtr("1.0.0"), + DiscoveryInfo: &corev1.DiscoveryInfo{ + DmiData: &corev1.DmiData{ + BoardName: "test-board-name", + BoardSerial: "test-board-serial", + BoardVersion: "test-board-version", + BiosDate: "test-bios-date", + BiosVersion: "test-bios-version", + ProductSerial: "test-product-serial", + ChassisSerial: "test-chassis-serial", + ProductName: "test-product-name", + SysVendor: "test-sys-vendor", + }, }, - }, - Interfaces: []*corev1.MachineInterface{ - { - Id: &corev1.MachineInterfaceId{ - Value: "test-interface-id", + Interfaces: []*corev1.MachineInterface{ + { + Id: &corev1.MachineInterfaceId{ + Value: "test-interface-id", + }, + }, + }, + Health: &corev1.HealthReport{ + Source: "test-health-source", + ObservedAt: timestamppb.New(time.Now()), + Successes: []*corev1.HealthProbeSuccess{ + { + Id: "test-success-id", + Target: cutil.GetPtr("test-success-target"), + }, + }, + Alerts: []*corev1.HealthProbeAlert{ + { + Id: "test-alert-id", + Target: cutil.GetPtr("test-alert-target"), + InAlertSince: nil, + Classifications: []string{ + "test-alert-classification", + }, + Message: "test-alert-message", + TenantMessage: nil, + }, }, }, }, + BmcInfo: &corev1.BmcInfo{ + Ip: cutil.GetPtr("10.0.0.1"), + }, Inventory: &corev1.MachineComponentInventory{ Components: []*corev1.MachineInventorySoftwareComponent{ { @@ -62,28 +87,6 @@ func TestAPIDpuMachine_FromProto(t *testing.T) { }, }, }, - Health: &corev1.HealthReport{ - Source: "test-health-source", - ObservedAt: timestamppb.New(time.Now()), - Successes: []*corev1.HealthProbeSuccess{ - { - Id: "test-success-id", - Target: cutil.GetPtr("test-success-target"), - }, - }, - Alerts: []*corev1.HealthProbeAlert{ - { - Id: "test-alert-id", - Target: cutil.GetPtr("test-alert-target"), - InAlertSince: nil, - Classifications: []string{ - "test-alert-classification", - }, - Message: "test-alert-message", - TenantMessage: nil, - }, - }, - }, Metadata: &corev1.Metadata{ Labels: []*corev1.Label{ { @@ -114,6 +117,10 @@ func TestAPIDpuMachine_FromProto(t *testing.T) { assert.Equal(t, "test-board-version", *dpuMachine.DMIData.BoardVersion) assert.Equal(t, "test-product-name", *dpuMachine.DMIData.ProductName) assert.Equal(t, "test-sys-vendor", *dpuMachine.DMIData.SysVendor) + require.Len(t, dpuMachine.Interfaces, 1) + assert.Equal(t, "test-interface-id", dpuMachine.Interfaces[0].ID) + require.NotNil(t, dpuMachine.Health) + assert.Equal(t, "test-health-source", dpuMachine.Health.Source) } // TestAPIDpuMachine_FromProto_NilMachine guards against a panic when a diff --git a/rest-api/api/pkg/api/model/machine.go b/rest-api/api/pkg/api/model/machine.go index 4594cccb89..95ae0a8dea 100644 --- a/rest-api/api/pkg/api/model/machine.go +++ b/rest-api/api/pkg/api/model/machine.go @@ -617,7 +617,7 @@ func NewAPIMachine(dbm *cdbm.Machine, dbmcs []cdbm.MachineCapability, dbmis []cd apim.ScoutVersion = machine.LastScoutObservedVersion } } - for _, dpuID := range dbm.Metadata.GetAssociatedDpuMachineIds() { + for _, dpuID := range dbm.Metadata.GetStatus().GetAssociatedDpuMachineIds() { if id := dpuID.GetId(); id != "" { apim.AssociatedDpuMachineIds = append(apim.AssociatedDpuMachineIds, id) } @@ -637,23 +637,24 @@ func NewAPIMachine(dbm *cdbm.Machine, dbmcs []cdbm.MachineCapability, dbmis []cd // Get the Machine json body machine := dbm.Metadata + discoveryInfo := machine.GetStatus().GetDiscoveryInfo() // BMCInfo if machine.BmcInfo != nil { apim.Metadata.BMCInfo = &APIBMCInfo{} apim.Metadata.BMCInfo.FromProto(machine.BmcInfo) } - if machine.DiscoveryInfo != nil { + if discoveryInfo != nil { // DMIData - if machine.DiscoveryInfo.DmiData != nil { + if discoveryInfo.DmiData != nil { apim.Metadata.DMIData = &APIDMIData{} - apim.Metadata.DMIData.FromProto(machine.DiscoveryInfo.DmiData) + apim.Metadata.DMIData.FromProto(discoveryInfo.DmiData) } // GPUInfo - if len(machine.DiscoveryInfo.Gpus) > 0 { + if len(discoveryInfo.Gpus) > 0 { apim.Metadata.GPUs = []APIMachineGPUInfo{} - for _, gpuInfo := range machine.DiscoveryInfo.Gpus { + for _, gpuInfo := range discoveryInfo.Gpus { lgpuInfo := APIMachineGPUInfo{} lgpuInfo.FromProto(gpuInfo) apim.Metadata.GPUs = append(apim.Metadata.GPUs, lgpuInfo) @@ -661,9 +662,9 @@ func NewAPIMachine(dbm *cdbm.Machine, dbmcs []cdbm.MachineCapability, dbmis []cd } // Machine Network Interface Info - if len(machine.DiscoveryInfo.NetworkInterfaces) > 0 { + if len(discoveryInfo.NetworkInterfaces) > 0 { apim.Metadata.NetworkInterfaces = []APIMachineNetworkInterface{} - for _, nwiInfo := range machine.DiscoveryInfo.NetworkInterfaces { + for _, nwiInfo := range discoveryInfo.NetworkInterfaces { lnwiInfo := APIMachineNetworkInterface{} lnwiInfo.FromProto(nwiInfo) apim.Metadata.NetworkInterfaces = append(apim.Metadata.NetworkInterfaces, lnwiInfo) @@ -671,9 +672,9 @@ func NewAPIMachine(dbm *cdbm.Machine, dbmcs []cdbm.MachineCapability, dbmis []cd } // Machine InfiniBand Interface Info - if len(machine.DiscoveryInfo.InfinibandInterfaces) > 0 { + if len(discoveryInfo.InfinibandInterfaces) > 0 { apim.Metadata.InfiniBandInterfaces = []APIMachineInfiniBandInterface{} - for _, ibiInfo := range machine.DiscoveryInfo.InfinibandInterfaces { + for _, ibiInfo := range discoveryInfo.InfinibandInterfaces { libiInfo := APIMachineInfiniBandInterface{} libiInfo.FromProto(ibiInfo) apim.Metadata.InfiniBandInterfaces = append(apim.Metadata.InfiniBandInterfaces, libiInfo) diff --git a/rest-api/api/pkg/api/model/machine_test.go b/rest-api/api/pkg/api/model/machine_test.go index 98c1f71410..f1dfc91ba5 100644 --- a/rest-api/api/pkg/api/model/machine_test.go +++ b/rest-api/api/pkg/api/model/machine_test.go @@ -26,141 +26,241 @@ func TestMachine_NewAPIMachine(t *testing.T) { Machine: &corev1.Machine{ Id: &corev1.MachineId{Id: mID}, State: "Ready", - DiscoveryInfo: &corev1.DiscoveryInfo{ - NetworkInterfaces: []*corev1.NetworkInterface{ - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x14e4", - Device: "0x165f", - Path: "/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/net/eno8303", - Description: cutil.GetPtr("NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)"), + Status: &corev1.MachineStatus{ + DiscoveryInfo: &corev1.DiscoveryInfo{ + NetworkInterfaces: []*corev1.NetworkInterface{ + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x14e4", + Device: "0x165f", + Path: "/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/net/eno8303", + Description: cutil.GetPtr("NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)"), + }, }, - }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x14e4", - Device: "0x165f", - Path: "/devices/pci0000:00/0000:00:1c.5/0000:04:00.1/net/eno8403", - Description: cutil.GetPtr("NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)"), + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x14e4", + Device: "0x165f", + Path: "/devices/pci0000:00/0000:00:1c.5/0000:04:00.1/net/eno8403", + Description: cutil.GetPtr("NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)"), + }, }, - }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x14e4", - Device: "0x16d7", - Path: "/devices/pci0000:30/0000:30:04.0/0000:31:00.0/net/eno12399np0", - Description: cutil.GetPtr("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller"), + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x14e4", + Device: "0x16d7", + Path: "/devices/pci0000:30/0000:30:04.0/0000:31:00.0/net/eno12399np0", + Description: cutil.GetPtr("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller"), + }, }, - }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x14e4", - Device: "0x16d7", - Path: "/devices/pci0000:30/0000:30:04.0/0000:31:00.1/net/eno12409np1", - Description: cutil.GetPtr("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller"), + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x14e4", + Device: "0x16d7", + Path: "/devices/pci0000:30/0000:30:04.0/0000:31:00.1/net/eno12409np1", + Description: cutil.GetPtr("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller"), + }, }, - }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x15b3", - Device: "0xa2d6", - Path: "/devices/pci0000:b0/0000:b0:02.0/0000:b1:00.0/net/enp177s0f0np0", - NumaNode: 1, - Description: cutil.GetPtr("MT42822 BlueField-2 integrated ConnectX-6 Dx network controller"), + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x15b3", + Device: "0xa2d6", + Path: "/devices/pci0000:b0/0000:b0:02.0/0000:b1:00.0/net/enp177s0f0np0", + NumaNode: 1, + Description: cutil.GetPtr("MT42822 BlueField-2 integrated ConnectX-6 Dx network controller"), + }, }, - }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x15b3", - Device: "0xa2d6", - Path: "/devices/pci0000:b0/0000:b0:02.0/0000:b1:00.1/net/enp177s0f1np1", - NumaNode: 1, - Description: cutil.GetPtr("MT42822 BlueField-2 integrated ConnectX-6 Dx network controller"), + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x15b3", + Device: "0xa2d6", + Path: "/devices/pci0000:b0/0000:b0:02.0/0000:b1:00.1/net/enp177s0f1np1", + NumaNode: 1, + Description: cutil.GetPtr("MT42822 BlueField-2 integrated ConnectX-6 Dx network controller"), + }, }, }, - }, - BlockDevices: []*corev1.BlockDevice{ - { - Model: "NO_MODEL", - Revision: "NO_REVISION", - }, - { - Model: "LOGICAL_VOLUME", - Revision: "3.53", - Serial: "600508b1001cb4d1a278bf3ee7a72228", - }, - { - Model: "Dell Ent NVMe CM6 RI 1.92TB", - Revision: "2.1.3", - }, - { - Model: "SSDPF2KE016T9L", - Revision: "2CV1L028", - }, - { - Model: "DELLBOSS_VD", - Revision: "MV.R00-0", - }, - }, - DmiData: &corev1.DmiData{ - BoardName: "7Z23CTOLWW", - BoardVersion: "06", - BiosVersion: "U8E122J-1.51", - ProductSerial: "J1050ACR", - BoardSerial: ".C1KS2CS001G.", - ChassisSerial: "J1050ACR", - BiosDate: "03/30/2023", - ProductName: "ThinkSystem SR670 V2", - SysVendor: "Lenovo", - }, - NvmeDevices: []*corev1.NvmeDevice{ - { - Model: "Dell Ent NVMe CM6 RI 1.92TB", - FirmwareRev: "2.1.3", + BlockDevices: []*corev1.BlockDevice{ + { + Model: "NO_MODEL", + Revision: "NO_REVISION", + }, + { + Model: "LOGICAL_VOLUME", + Revision: "3.53", + Serial: "600508b1001cb4d1a278bf3ee7a72228", + }, + { + Model: "Dell Ent NVMe CM6 RI 1.92TB", + Revision: "2.1.3", + }, + { + Model: "SSDPF2KE016T9L", + Revision: "2CV1L028", + }, + { + Model: "DELLBOSS_VD", + Revision: "MV.R00-0", + }, }, - { - Model: "Dell Ent NVMe CM6 RI 1.92TB", - FirmwareRev: "2.1.3", + DmiData: &corev1.DmiData{ + BoardName: "7Z23CTOLWW", + BoardVersion: "06", + BiosVersion: "U8E122J-1.51", + ProductSerial: "J1050ACR", + BoardSerial: ".C1KS2CS001G.", + ChassisSerial: "J1050ACR", + BiosDate: "03/30/2023", + ProductName: "ThinkSystem SR670 V2", + SysVendor: "Lenovo", + }, + NvmeDevices: []*corev1.NvmeDevice{ + { + Model: "Dell Ent NVMe CM6 RI 1.92TB", + FirmwareRev: "2.1.3", + }, + { + Model: "Dell Ent NVMe CM6 RI 1.92TB", + FirmwareRev: "2.1.3", + }, + { + Model: "Dell Ent NVMe CM6 RI 1.92TB", + FirmwareRev: "2.1.3", + }, }, - { - Model: "Dell Ent NVMe CM6 RI 1.92TB", - FirmwareRev: "2.1.3", + Gpus: []*corev1.Gpu{ + { + Name: "NVIDIA H100 PCIe", + Serial: "1654422005434", + DriverVersion: "530.30.02", + VbiosVersion: "96.00.30.00.01", + InforomVersion: "1010.0200.00.02", + TotalMemory: "81559 MiB", + Frequency: "1755 MHz", + PciBusId: "00000000:17:00.0", + }, }, - }, - Gpus: []*corev1.Gpu{ - { - Name: "NVIDIA H100 PCIe", - Serial: "1654422005434", - DriverVersion: "530.30.02", - VbiosVersion: "96.00.30.00.01", - InforomVersion: "1010.0200.00.02", - TotalMemory: "81559 MiB", - Frequency: "1755 MHz", - PciBusId: "00000000:17:00.0", + InfinibandInterfaces: []*corev1.InfinibandInterface{ + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "Mellanox Technologies", + Device: "MT28908 Family [ConnectX-6]", + Path: "/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.0/infiniband/rocep202s0f0", + NumaNode: 1, + Description: cutil.GetPtr("MT28908 Family [ConnectX-6]"), + Slot: cutil.GetPtr("0000:ca:00.0"), + }, + Guid: "1070fd0300bd43ac", + }, + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "Mellanox Technologies", + Device: "MT28908 Family [ConnectX-6]", + Path: "/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.1/infiniband/rocep202s0f1", + NumaNode: 1, + Description: cutil.GetPtr("MT28908 Family [ConnectX-6]"), + Slot: cutil.GetPtr("0000:ca:00.1"), + }, + Guid: "1070fd0300bd43ad", + }, }, }, - InfinibandInterfaces: []*corev1.InfinibandInterface{ - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "Mellanox Technologies", - Device: "MT28908 Family [ConnectX-6]", - Path: "/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.0/infiniband/rocep202s0f0", - NumaNode: 1, - Description: cutil.GetPtr("MT28908 Family [ConnectX-6]"), - Slot: cutil.GetPtr("0000:ca:00.0"), - }, - Guid: "1070fd0300bd43ac", + Health: &corev1.HealthReport{ + Source: "aggregate-host-health", + Successes: []*corev1.HealthProbeSuccess{ + { + Id: "BgpDaemonEnabled", + Target: nil, + }, + { + Id: "BgpStats", + Target: nil, + }, + { + Id: "ContainerExists", + Target: nil, + }, + { + Id: "DhcpServer", + Target: nil, + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/frr/daemons"), + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/frr/frr.conf"), + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/network/interfaces"), + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/supervisor/conf.d/default-nico-dhcp-server.conf"), + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/supervisor/conf.d/default-isc-dhcp-relay.conf"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/frr/daemons"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/frr/frr.conf"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/network/interfaces"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/supervisor/conf.d/default-nico-dhcp-server.conf"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/supervisor/conf.d/default-isc-dhcp-relay.conf"), + }, + { + Id: "Ifreload", + Target: nil, + }, + { + Id: "RestrictedMode", + Target: nil, + }, + { + Id: "ServiceRunning", + Target: cutil.GetPtr("frr"), + }, + { + Id: "ServiceRunning", + Target: cutil.GetPtr("nl2doca"), + }, + { + Id: "ServiceRunning", + Target: cutil.GetPtr("rsyslog"), + }, + { + Id: "SupervisorctlStatus", + Target: nil, + }, }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "Mellanox Technologies", - Device: "MT28908 Family [ConnectX-6]", - Path: "/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.1/infiniband/rocep202s0f1", - NumaNode: 1, - Description: cutil.GetPtr("MT28908 Family [ConnectX-6]"), - Slot: cutil.GetPtr("0000:ca:00.1"), - }, - Guid: "1070fd0300bd43ad", + Alerts: []*corev1.HealthProbeAlert{ + { + Id: "HeartbeatTimeout", + Target: cutil.GetPtr("hardware-health"), + InAlertSince: nil, + Message: "", + TenantMessage: nil, + Classifications: []string{ + "PreventAllocations", + "PreventHostStateChanges", + }, + }, }, }, }, @@ -168,110 +268,12 @@ func TestMachine_NewAPIMachine(t *testing.T) { Ip: cutil.GetPtr("10.100.1.1"), Mac: cutil.GetPtr("00-B0-D0-63-C2-26"), }, - Health: &corev1.HealthReport{ - Source: "aggregate-host-health", - Successes: []*corev1.HealthProbeSuccess{ - { - Id: "BgpDaemonEnabled", - Target: nil, - }, - { - Id: "BgpStats", - Target: nil, - }, - { - Id: "ContainerExists", - Target: nil, - }, - { - Id: "DhcpServer", - Target: nil, - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/frr/daemons"), - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/frr/frr.conf"), - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/network/interfaces"), - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/supervisor/conf.d/default-nico-dhcp-server.conf"), - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/supervisor/conf.d/default-isc-dhcp-relay.conf"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/frr/daemons"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/frr/frr.conf"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/network/interfaces"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/supervisor/conf.d/default-nico-dhcp-server.conf"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/supervisor/conf.d/default-isc-dhcp-relay.conf"), - }, - { - Id: "Ifreload", - Target: nil, - }, - { - Id: "RestrictedMode", - Target: nil, - }, - { - Id: "ServiceRunning", - Target: cutil.GetPtr("frr"), - }, - { - Id: "ServiceRunning", - Target: cutil.GetPtr("nl2doca"), - }, - { - Id: "ServiceRunning", - Target: cutil.GetPtr("rsyslog"), - }, - { - Id: "SupervisorctlStatus", - Target: nil, - }, - }, - Alerts: []*corev1.HealthProbeAlert{ - { - Id: "HeartbeatTimeout", - Target: cutil.GetPtr("hardware-health"), - InAlertSince: nil, - Message: "", - TenantMessage: nil, - Classifications: []string{ - "PreventAllocations", - "PreventHostStateChanges", - }, - }, - }, - }, }, } // Convert Machine Health info data into health report interface var machineHealth map[string]interface{} - machineHealthJSON, _ := json.Marshal(machineInfo1.Machine.Health) + machineHealthJSON, _ := json.Marshal(machineInfo1.Machine.GetStatus().GetHealth()) _ = json.Unmarshal(machineHealthJSON, &machineHealth) dbm := &cdbm.Machine{ @@ -411,52 +413,52 @@ func TestMachine_NewAPIMachine(t *testing.T) { } if apimi.Metadata.DMIData != nil { - assert.Equal(t, *apimi.Metadata.DMIData.BoardName, machineInfo1.Machine.DiscoveryInfo.DmiData.BoardName) - assert.Equal(t, *apimi.Metadata.DMIData.BoardVersion, machineInfo1.Machine.DiscoveryInfo.DmiData.BoardVersion) - assert.Equal(t, *apimi.Metadata.DMIData.BiosDate, machineInfo1.Machine.DiscoveryInfo.DmiData.BiosDate) - assert.Equal(t, *apimi.Metadata.DMIData.BiosVersion, machineInfo1.Machine.DiscoveryInfo.DmiData.BiosVersion) - assert.Equal(t, *apimi.Metadata.DMIData.ProductSerial, machineInfo1.Machine.DiscoveryInfo.DmiData.ProductSerial) - assert.Equal(t, *apimi.Metadata.DMIData.BoardSerial, machineInfo1.Machine.DiscoveryInfo.DmiData.BoardSerial) - assert.Equal(t, *apimi.Metadata.DMIData.ChassisSerial, machineInfo1.Machine.DiscoveryInfo.DmiData.ChassisSerial) - assert.Equal(t, *apimi.Metadata.DMIData.SysVendor, machineInfo1.Machine.DiscoveryInfo.DmiData.SysVendor) + assert.Equal(t, *apimi.Metadata.DMIData.BoardName, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().DmiData.BoardName) + assert.Equal(t, *apimi.Metadata.DMIData.BoardVersion, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().DmiData.BoardVersion) + assert.Equal(t, *apimi.Metadata.DMIData.BiosDate, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().DmiData.BiosDate) + assert.Equal(t, *apimi.Metadata.DMIData.BiosVersion, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().DmiData.BiosVersion) + assert.Equal(t, *apimi.Metadata.DMIData.ProductSerial, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().DmiData.ProductSerial) + assert.Equal(t, *apimi.Metadata.DMIData.BoardSerial, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().DmiData.BoardSerial) + assert.Equal(t, *apimi.Metadata.DMIData.ChassisSerial, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().DmiData.ChassisSerial) + assert.Equal(t, *apimi.Metadata.DMIData.SysVendor, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().DmiData.SysVendor) } if apimi.Metadata.GPUs != nil { - assert.Equal(t, *apimi.Metadata.GPUs[0].Name, machineInfo1.Machine.DiscoveryInfo.Gpus[0].Name) - assert.Equal(t, *apimi.Metadata.GPUs[0].Serial, machineInfo1.Machine.DiscoveryInfo.Gpus[0].Serial) - assert.Equal(t, *apimi.Metadata.GPUs[0].DriverVersion, machineInfo1.Machine.DiscoveryInfo.Gpus[0].DriverVersion) - assert.Equal(t, *apimi.Metadata.GPUs[0].VbiosVersion, machineInfo1.Machine.DiscoveryInfo.Gpus[0].VbiosVersion) - assert.Equal(t, *apimi.Metadata.GPUs[0].InforomVersion, machineInfo1.Machine.DiscoveryInfo.Gpus[0].InforomVersion) - assert.Equal(t, *apimi.Metadata.GPUs[0].TotalMemory, machineInfo1.Machine.DiscoveryInfo.Gpus[0].TotalMemory) - assert.Equal(t, *apimi.Metadata.GPUs[0].Frequency, machineInfo1.Machine.DiscoveryInfo.Gpus[0].Frequency) - assert.Equal(t, *apimi.Metadata.GPUs[0].PciBusId, machineInfo1.Machine.DiscoveryInfo.Gpus[0].PciBusId) + assert.Equal(t, *apimi.Metadata.GPUs[0].Name, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().Gpus[0].Name) + assert.Equal(t, *apimi.Metadata.GPUs[0].Serial, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().Gpus[0].Serial) + assert.Equal(t, *apimi.Metadata.GPUs[0].DriverVersion, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().Gpus[0].DriverVersion) + assert.Equal(t, *apimi.Metadata.GPUs[0].VbiosVersion, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().Gpus[0].VbiosVersion) + assert.Equal(t, *apimi.Metadata.GPUs[0].InforomVersion, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().Gpus[0].InforomVersion) + assert.Equal(t, *apimi.Metadata.GPUs[0].TotalMemory, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().Gpus[0].TotalMemory) + assert.Equal(t, *apimi.Metadata.GPUs[0].Frequency, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().Gpus[0].Frequency) + assert.Equal(t, *apimi.Metadata.GPUs[0].PciBusId, machineInfo1.Machine.GetStatus().GetDiscoveryInfo().Gpus[0].PciBusId) } if apimi.Metadata.NetworkInterfaces != nil { - assert.Equal(t, len(apimi.Metadata.NetworkInterfaces), len(machineInfo1.Machine.DiscoveryInfo.NetworkInterfaces)) + assert.Equal(t, len(apimi.Metadata.NetworkInterfaces), len(machineInfo1.Machine.GetStatus().GetDiscoveryInfo().NetworkInterfaces)) } if apimi.Metadata.InfiniBandInterfaces != nil { - assert.Equal(t, len(apimi.Metadata.InfiniBandInterfaces), len(machineInfo1.Machine.DiscoveryInfo.InfinibandInterfaces)) + assert.Equal(t, len(apimi.Metadata.InfiniBandInterfaces), len(machineInfo1.Machine.GetStatus().GetDiscoveryInfo().InfinibandInterfaces)) } } if apimi.Health != nil { - assert.Equal(t, apimi.Health.Source, machineInfo1.Machine.Health.Source) + assert.Equal(t, apimi.Health.Source, machineInfo1.Machine.GetStatus().GetHealth().Source) if apimi.Health.ObservedAt != nil { - assert.Equal(t, apimi.Health.ObservedAt, machineInfo1.Machine.Health.ObservedAt) + assert.Equal(t, apimi.Health.ObservedAt, machineInfo1.Machine.GetStatus().GetHealth().ObservedAt) } - assert.Equal(t, len(apimi.Health.Successes), len(machineInfo1.Machine.Health.Successes)) + assert.Equal(t, len(apimi.Health.Successes), len(machineInfo1.Machine.GetStatus().GetHealth().Successes)) if apimi.Health.Alerts != nil { - assert.Equal(t, apimi.Health.Alerts[0].ID, machineInfo1.Machine.Health.Alerts[0].Id) + assert.Equal(t, apimi.Health.Alerts[0].ID, machineInfo1.Machine.GetStatus().GetHealth().Alerts[0].Id) if apimi.Health.Alerts[0].Target != nil { - assert.Equal(t, *apimi.Health.Alerts[0].Target, *machineInfo1.Machine.Health.Alerts[0].Target) + assert.Equal(t, *apimi.Health.Alerts[0].Target, *machineInfo1.Machine.GetStatus().GetHealth().Alerts[0].Target) } if apimi.Health.Alerts[0].TenantMessage != nil { - assert.Equal(t, *apimi.Health.Alerts[0].TenantMessage, *machineInfo1.Machine.Health.Alerts[0].TenantMessage) + assert.Equal(t, *apimi.Health.Alerts[0].TenantMessage, *machineInfo1.Machine.GetStatus().GetHealth().Alerts[0].TenantMessage) } - assert.Equal(t, apimi.Health.Alerts[0].Message, machineInfo1.Machine.Health.Alerts[0].Message) - assert.Equal(t, len(apimi.Health.Alerts[0].Classifications), len(machineInfo1.Machine.Health.Alerts[0].Classifications)) + assert.Equal(t, apimi.Health.Alerts[0].Message, machineInfo1.Machine.GetStatus().GetHealth().Alerts[0].Message) + assert.Equal(t, len(apimi.Health.Alerts[0].Classifications), len(machineInfo1.Machine.GetStatus().GetHealth().Alerts[0].Classifications)) } } diff --git a/rest-api/flow/internal/nicoapi/grpc.go b/rest-api/flow/internal/nicoapi/grpc.go index 88783b3eb4..12a803e169 100644 --- a/rest-api/flow/internal/nicoapi/grpc.go +++ b/rest-api/flow/internal/nicoapi/grpc.go @@ -908,7 +908,7 @@ func (c *grpcClient) findAssociatedDpuMachineIdsLocked( return nil, fmt.Errorf("machine %s not found", hostMachineID) } - dpus := resp.GetMachines()[0].GetAssociatedDpuMachineIds() + dpus := resp.GetMachines()[0].GetStatus().GetAssociatedDpuMachineIds() out := make([]string, 0, len(dpus)) for _, id := range dpus { if v := id.GetId(); v != "" { diff --git a/rest-api/flow/internal/nicoapi/model.go b/rest-api/flow/internal/nicoapi/model.go index b05564ddc5..c10798f6df 100644 --- a/rest-api/flow/internal/nicoapi/model.go +++ b/rest-api/flow/internal/nicoapi/model.go @@ -45,16 +45,18 @@ type MachinePosition struct { } func machineDetailFromPb(machine *corev1.Machine) MachineDetail { + config := machine.GetConfig() + status := machine.GetStatus() detail := MachineDetail{ MachineID: machine.Id.Id, State: machine.State, MachineType: machine.MachineType.String(), - UpdateComplete: machine.UpdateComplete, + UpdateComplete: status.GetUpdateComplete(), } // Chassis serial - if machine.DiscoveryInfo != nil && machine.DiscoveryInfo.DmiData != nil { - serial := machine.DiscoveryInfo.DmiData.ChassisSerial + if status.GetDiscoveryInfo() != nil && status.GetDiscoveryInfo().DmiData != nil { + serial := status.GetDiscoveryInfo().DmiData.ChassisSerial detail.ChassisSerial = &serial } @@ -72,8 +74,8 @@ func machineDetailFromPb(machine *corev1.Machine) MachineDetail { } // Health status - derived from alerts - if machine.Health != nil { - if len(machine.Health.Alerts) > 0 { + if status.GetHealth() != nil { + if len(status.GetHealth().Alerts) > 0 { detail.HealthStatus = "unhealthy" } else { detail.HealthStatus = "healthy" @@ -81,13 +83,13 @@ func machineDetailFromPb(machine *corev1.Machine) MachineDetail { } // Last observation time - if machine.LastObservationTime != nil { - t := machine.LastObservationTime.AsTime() + if status.GetLastObservationTime() != nil { + t := status.GetLastObservationTime().AsTime() detail.LastObservationTime = &t } - if machine.FirmwareAutoupdate != nil { - v := machine.GetFirmwareAutoupdate() + if config != nil && config.FirmwareAutoupdate != nil { + v := config.GetFirmwareAutoupdate() detail.FirmwareAutoupdate = &v } diff --git a/rest-api/site-workflow/pkg/grpc/server/nico_test_server.go b/rest-api/site-workflow/pkg/grpc/server/nico_test_server.go index 63ae58843d..8f256f10af 100644 --- a/rest-api/site-workflow/pkg/grpc/server/nico_test_server.go +++ b/rest-api/site-workflow/pkg/grpc/server/nico_test_server.go @@ -1047,239 +1047,241 @@ func (f *NICoServerImpl) LoadTestMachines() { f.m[nid] = &corev1.Machine{ Id: &corev1.MachineId{Id: nid}, State: "Ready", - Interfaces: []*corev1.MachineInterface{ - { - Id: &corev1.MachineInterfaceId{Value: uuid.NewString()}, - AttachedDpuMachineId: &corev1.MachineId{Id: uuid.NewString()}, - MachineId: &corev1.MachineId{Id: nid}, - SegmentId: &corev1.NetworkSegmentId{Value: uuid.NewString()}, - Hostname: "nico.nvidia.com", - PrimaryInterface: true, - MacAddress: generateMacAddress(), - Address: []string{generateIPAddress()}, - }, - }, - DiscoveryInfo: &corev1.DiscoveryInfo{ - NetworkInterfaces: []*corev1.NetworkInterface{ + Status: &corev1.MachineStatus{ + Interfaces: []*corev1.MachineInterface{ { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x14e4", - Device: "0x165f", - Path: "/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/net/eno8303", - Description: getStrPtr("NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)"), - }, + Id: &corev1.MachineInterfaceId{Value: uuid.NewString()}, + AttachedDpuMachineId: &corev1.MachineId{Id: uuid.NewString()}, + MachineId: &corev1.MachineId{Id: nid}, + SegmentId: &corev1.NetworkSegmentId{Value: uuid.NewString()}, + Hostname: "nico.nvidia.com", + PrimaryInterface: true, + MacAddress: generateMacAddress(), + Address: []string{generateIPAddress()}, }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x14e4", - Device: "0x165f", - Path: "/devices/pci0000:00/0000:00:1c.5/0000:04:00.1/net/eno8403", - Description: getStrPtr("NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)"), + }, + DiscoveryInfo: &corev1.DiscoveryInfo{ + NetworkInterfaces: []*corev1.NetworkInterface{ + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x14e4", + Device: "0x165f", + Path: "/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/net/eno8303", + Description: getStrPtr("NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)"), + }, }, - }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x14e4", - Device: "0x16d7", - Path: "/devices/pci0000:30/0000:30:04.0/0000:31:00.0/net/eno12399np0", - Description: getStrPtr("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller"), + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x14e4", + Device: "0x165f", + Path: "/devices/pci0000:00/0000:00:1c.5/0000:04:00.1/net/eno8403", + Description: getStrPtr("NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)"), + }, }, - }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x14e4", - Device: "0x16d7", - Path: "/devices/pci0000:30/0000:30:04.0/0000:31:00.1/net/eno12409np1", - Description: getStrPtr("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller"), + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x14e4", + Device: "0x16d7", + Path: "/devices/pci0000:30/0000:30:04.0/0000:31:00.0/net/eno12399np0", + Description: getStrPtr("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller"), + }, }, - }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x15b3", - Device: "0xa2d6", - Path: "/devices/pci0000:b0/0000:b0:02.0/0000:b1:00.0/net/enp177s0f0np0", - NumaNode: 1, - Description: getStrPtr("MT42822 BlueField-2 integrated ConnectX-6 Dx network controller"), + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x14e4", + Device: "0x16d7", + Path: "/devices/pci0000:30/0000:30:04.0/0000:31:00.1/net/eno12409np1", + Description: getStrPtr("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller"), + }, }, - }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "0x15b3", - Device: "0xa2d6", - Path: "/devices/pci0000:b0/0000:b0:02.0/0000:b1:00.1/net/enp177s0f1np1", - NumaNode: 1, - Description: getStrPtr("MT42822 BlueField-2 integrated ConnectX-6 Dx network controller"), + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x15b3", + Device: "0xa2d6", + Path: "/devices/pci0000:b0/0000:b0:02.0/0000:b1:00.0/net/enp177s0f0np0", + NumaNode: 1, + Description: getStrPtr("MT42822 BlueField-2 integrated ConnectX-6 Dx network controller"), + }, + }, + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "0x15b3", + Device: "0xa2d6", + Path: "/devices/pci0000:b0/0000:b0:02.0/0000:b1:00.1/net/enp177s0f1np1", + NumaNode: 1, + Description: getStrPtr("MT42822 BlueField-2 integrated ConnectX-6 Dx network controller"), + }, }, }, - }, - BlockDevices: []*corev1.BlockDevice{ - { - Model: "NO_MODEL", - Revision: "NO_REVISION", - }, - { - Model: "LOGICAL_VOLUME", - Revision: "3.53", - Serial: "600508b1001cb4d1a278bf3ee7a72228", - }, - { - Model: "Dell Ent NVMe CM6 RI 1.92TB", - Revision: "2.1.3", - }, - { - Model: "SSDPF2KE016T9L", - Revision: "2CV1L028", - }, - { - Model: "DELLBOSS_VD", - Revision: "MV.R00-0", - }, - }, - DmiData: &corev1.DmiData{ - BoardName: "7Z23CTOLWW", - BoardVersion: "06", - BiosVersion: "U8E122J-1.51", - ProductSerial: "J1050ACR", - BoardSerial: ".C1KS2CS001G.", - ChassisSerial: "J1050ACR", - BiosDate: "03/30/2023", - ProductName: "ThinkSystem SR670 V2", - SysVendor: "Lenovo", - }, - NvmeDevices: []*corev1.NvmeDevice{ - { - Model: "Dell Ent NVMe CM6 RI 1.92TB", - FirmwareRev: "2.1.3", - }, - { - Model: "Dell Ent NVMe CM6 RI 1.92TB", - FirmwareRev: "2.1.3", - }, - { - Model: "Dell Ent NVMe CM6 RI 1.92TB", - FirmwareRev: "2.1.3", - }, - }, - Gpus: []*corev1.Gpu{ - { - Name: "NVIDIA H100 PCIe", - Serial: "1654422005434", - DriverVersion: "530.30.02", - VbiosVersion: "96.00.30.00.01", - InforomVersion: "1010.0200.00.02", - TotalMemory: "81559 MiB", - Frequency: "1755 MHz", - PciBusId: "00000000:17:00.0", - }, - }, - MemoryDevices: []*corev1.MemoryDevice{ - { - SizeMb: &memSize, - MemType: getStrPtr("DDR4"), - }, - { - SizeMb: &memSize, - MemType: getStrPtr("DDR4"), - }, - { - SizeMb: &memSize, - MemType: getStrPtr("DDR4"), - }, - { - SizeMb: &memSize, - MemType: getStrPtr("DDR4"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), - }, - { - SizeMb: &memSize, - MemType: getStrPtr("DDR4"), - }, - { - SizeMb: &memSize, - MemType: getStrPtr("DDR4"), + BlockDevices: []*corev1.BlockDevice{ + { + Model: "NO_MODEL", + Revision: "NO_REVISION", + }, + { + Model: "LOGICAL_VOLUME", + Revision: "3.53", + Serial: "600508b1001cb4d1a278bf3ee7a72228", + }, + { + Model: "Dell Ent NVMe CM6 RI 1.92TB", + Revision: "2.1.3", + }, + { + Model: "SSDPF2KE016T9L", + Revision: "2CV1L028", + }, + { + Model: "DELLBOSS_VD", + Revision: "MV.R00-0", + }, }, - { - SizeMb: &memSize, - MemType: getStrPtr("DDR4"), + DmiData: &corev1.DmiData{ + BoardName: "7Z23CTOLWW", + BoardVersion: "06", + BiosVersion: "U8E122J-1.51", + ProductSerial: "J1050ACR", + BoardSerial: ".C1KS2CS001G.", + ChassisSerial: "J1050ACR", + BiosDate: "03/30/2023", + ProductName: "ThinkSystem SR670 V2", + SysVendor: "Lenovo", }, - { - SizeMb: &memSize, - MemType: getStrPtr("DDR4"), + NvmeDevices: []*corev1.NvmeDevice{ + { + Model: "Dell Ent NVMe CM6 RI 1.92TB", + FirmwareRev: "2.1.3", + }, + { + Model: "Dell Ent NVMe CM6 RI 1.92TB", + FirmwareRev: "2.1.3", + }, + { + Model: "Dell Ent NVMe CM6 RI 1.92TB", + FirmwareRev: "2.1.3", + }, }, - { - SizeMb: nil, - MemType: getStrPtr("UNKNOWN"), + Gpus: []*corev1.Gpu{ + { + Name: "NVIDIA H100 PCIe", + Serial: "1654422005434", + DriverVersion: "530.30.02", + VbiosVersion: "96.00.30.00.01", + InforomVersion: "1010.0200.00.02", + TotalMemory: "81559 MiB", + Frequency: "1755 MHz", + PciBusId: "00000000:17:00.0", + }, }, - }, - InfinibandInterfaces: []*corev1.InfinibandInterface{ - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "Mellanox Technologies", - Device: "MT28908 Family [ConnectX-6]", - Path: "/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.0/infiniband/rocep202s0f0", - NumaNode: 1, - Description: getStrPtr("MT28908 Family [ConnectX-6]"), - Slot: getStrPtr("0000:ca:00.0"), + MemoryDevices: []*corev1.MemoryDevice{ + { + SizeMb: &memSize, + MemType: getStrPtr("DDR4"), + }, + { + SizeMb: &memSize, + MemType: getStrPtr("DDR4"), + }, + { + SizeMb: &memSize, + MemType: getStrPtr("DDR4"), + }, + { + SizeMb: &memSize, + MemType: getStrPtr("DDR4"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), + }, + { + SizeMb: &memSize, + MemType: getStrPtr("DDR4"), + }, + { + SizeMb: &memSize, + MemType: getStrPtr("DDR4"), + }, + { + SizeMb: &memSize, + MemType: getStrPtr("DDR4"), + }, + { + SizeMb: &memSize, + MemType: getStrPtr("DDR4"), + }, + { + SizeMb: nil, + MemType: getStrPtr("UNKNOWN"), }, - Guid: "1070fd0300bd43ac", }, - { - PciProperties: &corev1.PciDeviceProperties{ - Vendor: "Mellanox Technologies", - Device: "MT28908 Family [ConnectX-6]", - Path: "/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.1/infiniband/rocep202s0f1", - NumaNode: 1, - Description: getStrPtr("MT28908 Family [ConnectX-6]"), - Slot: getStrPtr("0000:ca:00.1"), + InfinibandInterfaces: []*corev1.InfinibandInterface{ + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "Mellanox Technologies", + Device: "MT28908 Family [ConnectX-6]", + Path: "/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.0/infiniband/rocep202s0f0", + NumaNode: 1, + Description: getStrPtr("MT28908 Family [ConnectX-6]"), + Slot: getStrPtr("0000:ca:00.0"), + }, + Guid: "1070fd0300bd43ac", + }, + { + PciProperties: &corev1.PciDeviceProperties{ + Vendor: "Mellanox Technologies", + Device: "MT28908 Family [ConnectX-6]", + Path: "/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.1/infiniband/rocep202s0f1", + NumaNode: 1, + Description: getStrPtr("MT28908 Family [ConnectX-6]"), + Slot: getStrPtr("0000:ca:00.1"), + }, + Guid: "1070fd0300bd43ad", }, - Guid: "1070fd0300bd43ad", }, }, }, diff --git a/rest-api/workflow/pkg/activity/machine/machine.go b/rest-api/workflow/pkg/activity/machine/machine.go index e0188e82c8..8f89e5f3e5 100644 --- a/rest-api/workflow/pkg/activity/machine/machine.go +++ b/rest-api/workflow/pkg/activity/machine/machine.go @@ -218,6 +218,8 @@ func (mm *ManageMachine) UpdateMachinesInDB(ctx context.Context, siteIDStr strin } controllerMachine := machineInfo.Machine + controllerMachineConfig := controllerMachine.GetConfig() + controllerMachineStatus := controllerMachine.GetStatus() controllerMachineID := controllerMachine.Id.Id if controllerMachineID == "" { @@ -237,9 +239,9 @@ func (mm *ManageMachine) UpdateMachinesInDB(ctx context.Context, siteIDStr strin // Populate machine health information var machineHealth map[string]interface{} - if controllerMachine.Health != nil { + if controllerMachineStatus.GetHealth() != nil { // Populate machine health - machineHealthJSON, serr := json.Marshal(controllerMachine.Health) + machineHealthJSON, serr := json.Marshal(controllerMachineStatus.GetHealth()) if serr != nil { slogger.Error().Err(serr).Msg("failed to marshal controller Machine Health data") } @@ -251,7 +253,7 @@ func (mm *ManageMachine) UpdateMachinesInDB(ctx context.Context, siteIDStr strin } // Extract information from discovery data - discoveryInfo := controllerMachine.DiscoveryInfo + discoveryInfo := controllerMachineStatus.GetDiscoveryInfo() // Extract general Machine type controllerMachineType := DefaultControllerMachineType @@ -280,21 +282,22 @@ func (mm *ManageMachine) UpdateMachinesInDB(ctx context.Context, siteIDStr strin var isInMaintenance, isNetworkDegraded bool var maintenanceMessage, networkHealthMessage *string - if controllerMachine.MaintenanceStartTime != nil { + if controllerMachineConfig.GetMaintenanceStartTime() != nil { isInMaintenance = true - maintenanceMessage = controllerMachine.MaintenanceReference + maintenanceMessage = controllerMachineConfig.MaintenanceReference } // Extract Machine Hostname var hostname *string - if len(controllerMachine.Interfaces) > 0 { - hostname = cwutil.GetPtr(controllerMachine.Interfaces[0].Hostname) + controllerMachineInterfaces := controllerMachineStatus.GetInterfaces() + if len(controllerMachineInterfaces) > 0 { + hostname = cwutil.GetPtr(controllerMachineInterfaces[0].Hostname) } var controllerInstanceTypeID *uuid.UUID - if controllerMachine.InstanceTypeId != nil { - id, serr := uuid.Parse(*controllerMachine.InstanceTypeId) + if controllerMachineConfig != nil && controllerMachineConfig.InstanceTypeId != nil { + id, serr := uuid.Parse(*controllerMachineConfig.InstanceTypeId) if serr != nil { slogger.Error().Err(serr).Msg("failed to parse InstanceType ID in Machine data") continue @@ -315,6 +318,11 @@ func (mm *ManageMachine) UpdateMachinesInDB(ctx context.Context, siteIDStr strin } } + var hwSkuDeviceType *string + if controllerMachineStatus != nil { + hwSkuDeviceType = controllerMachineStatus.HwSkuDeviceType + } + var machine *cdbm.Machine if !found { @@ -332,7 +340,7 @@ func (mm *ManageMachine) UpdateMachinesInDB(ctx context.Context, siteIDStr strin SiteID: site.ID, ControllerMachineID: controllerMachineID, ControllerMachineType: &controllerMachineType, - HwSkuDeviceType: controllerMachine.HwSkuDeviceType, + HwSkuDeviceType: hwSkuDeviceType, InstanceTypeID: controllerInstanceTypeID, Vendor: vendor, ProductName: productName, @@ -377,7 +385,7 @@ func (mm *ManageMachine) UpdateMachinesInDB(ctx context.Context, siteIDStr strin logger.Error().Err(serr).Msg("error creating Status Detail DB entry") } - for _, controllerMachineInterface := range controllerMachine.Interfaces { + for _, controllerMachineInterface := range controllerMachineStatus.GetInterfaces() { controllerInterfaceID, serr := uuid.Parse(controllerMachineInterface.Id.Value) if serr != nil { slogger.Error().Err(serr).Msg("failed to parse Controller Interface ID, possible bad data") @@ -447,7 +455,7 @@ func (mm *ManageMachine) UpdateMachinesInDB(ctx context.Context, siteIDStr strin updateInput := cdbm.MachineUpdateInput{ MachineID: existingCloudMachine.ID, ControllerMachineType: &controllerMachineType, - HwSkuDeviceType: controllerMachine.HwSkuDeviceType, + HwSkuDeviceType: hwSkuDeviceType, Vendor: vendor, ProductName: productName, SerialNumber: serialNumber, @@ -592,7 +600,7 @@ func (mm *ManageMachine) UpdateMachinesInDB(ctx context.Context, siteIDStr strin } // Reported machine interfaces for a machine - for _, controllerMachineInterface := range controllerMachine.Interfaces { + for _, controllerMachineInterface := range controllerMachineStatus.GetInterfaces() { controllerInterfaceID, serr := uuid.Parse(controllerMachineInterface.Id.Value) if serr != nil { slogger.Error().Err(serr).Msg("failed to parse Controller Interface ID, possible bad data") @@ -756,13 +764,15 @@ func processMachineCapabilities(ctx context.Context, logger zerolog.Logger, dbSe return err } - controllerCapsCpu := controllerMachine.GetCapabilities().GetCpu() - controllerCapsGpu := controllerMachine.GetCapabilities().GetGpu() - controllerCapsDpu := controllerMachine.GetCapabilities().GetDpu() - controllerCapsMemory := controllerMachine.GetCapabilities().GetMemory() - controllerCapsInfiniband := controllerMachine.GetCapabilities().GetInfiniband() - controllerCapsNetwork := controllerMachine.GetCapabilities().GetNetwork() - controllerCapsStorage := controllerMachine.GetCapabilities().GetStorage() + controllerCaps := controllerMachine.GetStatus().GetCapabilities() + + controllerCapsCpu := controllerCaps.GetCpu() + controllerCapsGpu := controllerCaps.GetGpu() + controllerCapsDpu := controllerCaps.GetDpu() + controllerCapsMemory := controllerCaps.GetMemory() + controllerCapsInfiniband := controllerCaps.GetInfiniband() + controllerCapsNetwork := controllerCaps.GetNetwork() + controllerCapsStorage := controllerCaps.GetStorage() siteCapMap := make(map[string]*cdbm.MachineCapability) @@ -996,6 +1006,8 @@ func getNICoMachineStatus(controllerMachine *corev1.Machine, logger zerolog.Logg logger.Warn().Msg("Received empty Machine state from Site Controller") return cdbm.MachineStatusUnknown, "Machine status is not known", false } + controllerMachineConfig := controllerMachine.GetConfig() + controllerMachineStatus := controllerMachine.GetStatus() // Parse state to get prefix and substate controllerMachineWrapped := &cdbm.SiteControllerMachine{Machine: controllerMachine} @@ -1014,25 +1026,23 @@ func getNICoMachineStatus(controllerMachine *corev1.Machine, logger zerolog.Logg hasMaintenanceDegraded := false hasDPUFirmwareUpdateInProgress := false - if controllerMachine.Health != nil && controllerMachine.Health.Alerts != nil { - for _, alert := range controllerMachine.Health.Alerts { - // Check for Prevent alerts - for _, clf := range alert.Classifications { - if clf == MachinePreventAllocations { - hasPreventAlerts = true - break - } - } - // Check for Maintenance+Degraded alert - if alert.Id == "Maintenance" && alert.Target != nil && *alert.Target == "Degraded" { - hasMaintenanceDegraded = true - } - if alert.Id == MachineDPUFirmwareUpdateAlertID && - alert.Target != nil && - *alert.Target == MachineDPUFirmwareUpdateAlertTarget { - hasDPUFirmwareUpdateInProgress = true + for _, alert := range controllerMachineStatus.GetHealth().GetAlerts() { + // Check for Prevent alerts + for _, clf := range alert.Classifications { + if clf == MachinePreventAllocations { + hasPreventAlerts = true + break } } + // Check for Maintenance+Degraded alert + if alert.Id == "Maintenance" && alert.Target != nil && *alert.Target == "Degraded" { + hasMaintenanceDegraded = true + } + if alert.Id == MachineDPUFirmwareUpdateAlertID && + alert.Target != nil && + *alert.Target == MachineDPUFirmwareUpdateAlertTarget { + hasDPUFirmwareUpdateInProgress = true + } } // Determine machineStatus and statusMessage @@ -1040,11 +1050,12 @@ func getNICoMachineStatus(controllerMachine *corev1.Machine, logger zerolog.Logg var statusMessage string // Check maintenance mode first - if controllerMachine.MaintenanceStartTime != nil { + if controllerMachineConfig.GetMaintenanceStartTime() != nil { machineStatus = cdbm.MachineStatusMaintenance statusMessage = "Machine is in maintenance mode" - if controllerMachine.MaintenanceReference != nil { - statusMessage = fmt.Sprintf("%s: %s", statusMessage, *controllerMachine.MaintenanceReference) + maintenanceReference := controllerMachineConfig.MaintenanceReference + if maintenanceReference != nil { + statusMessage = fmt.Sprintf("%s: %s", statusMessage, *maintenanceReference) } } else if hasDPUFirmwareUpdateInProgress { machineStatus = cdbm.MachineStatusInitializing diff --git a/rest-api/workflow/pkg/activity/machine/machine_test.go b/rest-api/workflow/pkg/activity/machine/machine_test.go index 8a3d3f58a9..4f6855a97d 100644 --- a/rest-api/workflow/pkg/activity/machine/machine_test.go +++ b/rest-api/workflow/pkg/activity/machine/machine_test.go @@ -372,22 +372,107 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { machineInfo1 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m.ControllerMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{newMachineInterface1}, - HwSkuDeviceType: cutil.GetPtr("CPU_HwSkuDeviceType"), - DiscoveryInfo: &corev1.DiscoveryInfo{ - DmiData: &corev1.DmiData{ - BoardName: "7Z23CTOLWW", - BoardVersion: "06", - BiosVersion: "U8E122J-1.51", - ProductSerial: "J1050ACR", - BoardSerial: ".C1KS2CS001G.", - ChassisSerial: "J1050ACR5", - BiosDate: "03/30/2023", - ProductName: "ThinkSystem SR670 V2", - SysVendor: "Lenovo", + Id: &corev1.MachineId{Id: m.ControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{ + Interfaces: []*corev1.MachineInterface{newMachineInterface1}, + HwSkuDeviceType: cutil.GetPtr("CPU_HwSkuDeviceType"), + DiscoveryInfo: &corev1.DiscoveryInfo{ + DmiData: &corev1.DmiData{ + BoardName: "7Z23CTOLWW", + BoardVersion: "06", + BiosVersion: "U8E122J-1.51", + ProductSerial: "J1050ACR", + BoardSerial: ".C1KS2CS001G.", + ChassisSerial: "J1050ACR5", + BiosDate: "03/30/2023", + ProductName: "ThinkSystem SR670 V2", + SysVendor: "Lenovo", + }, }, + Capabilities: &corev1.MachineCapabilitiesSet{ + Cpu: []*corev1.MachineCapabilityAttributesCpu{{ + Name: "Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz", + Count: 2, + Vendor: cutil.GetPtr("GenuineIntel"), + Cores: util.GetUint32Ptr(3), + Threads: util.GetUint32Ptr(6), + }}, + Network: []*corev1.MachineCapabilityAttributesNetwork{ + { + Name: "NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)", + Count: 2, + Vendor: cutil.GetPtr("0x165f"), + }, + { + Name: "BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller", + Count: 2, + Vendor: cutil.GetPtr("0x14e4"), + }, + { + Name: "MT42822 BlueField-2 integrated ConnectX-6 Dx network controller", + Count: 2, + Vendor: cutil.GetPtr("0x15b3"), + DeviceType: corev1.MachineCapabilityDeviceType(corev1.MachineCapabilityDeviceType_MACHINE_CAPABILITY_DEVICE_TYPE_DPU).Enum(), + }, + }, + Storage: []*corev1.MachineCapabilityAttributesStorage{ + { + Name: "SSDPF2KE016T9L", + Count: 1, + }, + { + Name: "Dell Ent NVMe CM6 RI 1.92TB", + Count: 4, + }, + { + Name: "DELLBOSS_VD", + Count: 1, + }, + }, + Gpu: []*corev1.MachineCapabilityAttributesGpu{ + { + Name: "NVIDIA H100 PCIe", + Frequency: cutil.GetPtr("1755 MHz"), + Capacity: cutil.GetPtr("81559 MiB"), + Count: 1, + }, + { + Name: "NVIDIA GB200", + Frequency: cutil.GetPtr("1755 MHz"), + Capacity: cutil.GetPtr("81559 MiB"), + Count: 4, + DeviceType: corev1.MachineCapabilityDeviceType(corev1.MachineCapabilityDeviceType_MACHINE_CAPABILITY_DEVICE_TYPE_NVLINK).Enum(), + }, + }, + Memory: []*corev1.MachineCapabilityAttributesMemory{ + { + Name: "DDR4", + Capacity: cutil.GetPtr(fmt.Sprintf("%d", memSize)), + Count: 8, + }, + { + Name: "UNKNOWN", + Capacity: nil, + Count: 7, + }, + }, + Infiniband: []*corev1.MachineCapabilityAttributesInfiniband{ + { + Name: "MT28908 Family [ConnectX-6]", + Vendor: cutil.GetPtr(""), + Count: 2, + InactiveDevices: []uint32{2, 4}, + }, + }, + Dpu: []*corev1.MachineCapabilityAttributesDpu{ + { + Name: "BF3", + Count: 2, + }, + }, + }, + AssociatedDpuMachineIds: []*corev1.MachineId{newMachineInterface1.AttachedDpuMachineId, newMachineInterface3.AttachedDpuMachineId}, }, Metadata: &corev1.Metadata{ Labels: []*corev1.Label{ @@ -405,89 +490,6 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { }, }, }, - Capabilities: &corev1.MachineCapabilitiesSet{ - Cpu: []*corev1.MachineCapabilityAttributesCpu{{ - Name: "Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz", - Count: 2, - Vendor: cutil.GetPtr("GenuineIntel"), - Cores: util.GetUint32Ptr(3), - Threads: util.GetUint32Ptr(6), - }}, - Network: []*corev1.MachineCapabilityAttributesNetwork{ - { - Name: "NetXtreme BCM5720 2-port Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board)", - Count: 2, - Vendor: cutil.GetPtr("0x165f"), - }, - { - Name: "BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller", - Count: 2, - Vendor: cutil.GetPtr("0x14e4"), - }, - { - Name: "MT42822 BlueField-2 integrated ConnectX-6 Dx network controller", - Count: 2, - Vendor: cutil.GetPtr("0x15b3"), - DeviceType: corev1.MachineCapabilityDeviceType(corev1.MachineCapabilityDeviceType_MACHINE_CAPABILITY_DEVICE_TYPE_DPU).Enum(), - }, - }, - Storage: []*corev1.MachineCapabilityAttributesStorage{ - { - Name: "SSDPF2KE016T9L", - Count: 1, - }, - { - Name: "Dell Ent NVMe CM6 RI 1.92TB", - Count: 4, - }, - { - Name: "DELLBOSS_VD", - Count: 1, - }, - }, - Gpu: []*corev1.MachineCapabilityAttributesGpu{ - { - Name: "NVIDIA H100 PCIe", - Frequency: cutil.GetPtr("1755 MHz"), - Capacity: cutil.GetPtr("81559 MiB"), - Count: 1, - }, - { - Name: "NVIDIA GB200", - Frequency: cutil.GetPtr("1755 MHz"), - Capacity: cutil.GetPtr("81559 MiB"), - Count: 4, - DeviceType: corev1.MachineCapabilityDeviceType(corev1.MachineCapabilityDeviceType_MACHINE_CAPABILITY_DEVICE_TYPE_NVLINK).Enum(), - }, - }, - Memory: []*corev1.MachineCapabilityAttributesMemory{ - { - Name: "DDR4", - Capacity: cutil.GetPtr(fmt.Sprintf("%d", memSize)), - Count: 8, - }, - { - Name: "UNKNOWN", - Capacity: nil, - Count: 7, - }, - }, - Infiniband: []*corev1.MachineCapabilityAttributesInfiniband{ - { - Name: "MT28908 Family [ConnectX-6]", - Vendor: cutil.GetPtr(""), - Count: 2, - InactiveDevices: []uint32{2, 4}, - }, - }, - Dpu: []*corev1.MachineCapabilityAttributesDpu{ - { - Name: "BF3", - Count: 2, - }, - }, - }, - AssociatedDpuMachineIds: []*corev1.MachineId{newMachineInterface1.AttachedDpuMachineId, newMachineInterface3.AttachedDpuMachineId}, }, } @@ -505,188 +507,182 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { } machineInfo2 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: newControllerMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{newMachineInterface2}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: newControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{ + Interfaces: []*corev1.MachineInterface{newMachineInterface2}, + }, }, } // This machine was previously missing from Site inventory machineInfo3 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m4.ControllerMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m4.ControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, }, } // Machine cleared out of maintenance and network degraded state machineInfo4 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m5.ControllerMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m5.ControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, }, } // Machine with maintenance and network issue machineInfo5 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m6.ControllerMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, - MaintenanceStartTime: ×tamppb.Timestamp{ - Seconds: refTime.Unix(), + Id: &corev1.MachineId{Id: m6.ControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, + Config: &corev1.MachineConfig{ + MaintenanceStartTime: ×tamppb.Timestamp{Seconds: refTime.Unix()}, + MaintenanceReference: cutil.GetPtr("Test maintenance message"), }, - MaintenanceReference: cutil.GetPtr("Test maintenance message"), }, } // Machine failed measured boot attestation machineInfo6 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m7.ControllerMachineID}, - State: controllerMachineStatePrefixMeasuring + "/" + controllerMachineFailedMeasurementsFailedSignatureCheck, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m7.ControllerMachineID}, + State: controllerMachineStatePrefixMeasuring + "/" + controllerMachineFailedMeasurementsFailedSignatureCheck, + Status: &corev1.MachineStatus{}, }, } // Machine has failed state machineInfo7 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m8.ControllerMachineID}, - State: controllerMachineStatePrefixFailed, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m8.ControllerMachineID}, + State: controllerMachineStatePrefixFailed, + Status: &corev1.MachineStatus{}, }, } // Machine DPU is reconfiguring machineInfo8 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m9.ControllerMachineID}, - State: controllerMachineStatePrefixDPUInitializing, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m9.ControllerMachineID}, + State: controllerMachineStatePrefixDPUInitializing, + Status: &corev1.MachineStatus{}, }, } // Machine is pending measurement machineInfo9 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m10.ControllerMachineID}, - State: controllerMachineStatePrefixMeasuring + "/" + controllerMachineMeasuringSubstatePendingBundle, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m10.ControllerMachineID}, + State: controllerMachineStatePrefixMeasuring + "/" + controllerMachineMeasuringSubstatePendingBundle, + Status: &corev1.MachineStatus{}, }, } // Machine with health issue machineInfo10 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m11.ControllerMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, - Health: &corev1.HealthReport{ - Source: "aggregate-host-health", - Successes: []*corev1.HealthProbeSuccess{ - { - Id: "BgpDaemonEnabled", - Target: nil, - }, - { - Id: "BgpStats", - Target: nil, - }, - { - Id: "ContainerExists", - Target: nil, - }, - { - Id: "DhcpServer", - Target: nil, - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/frr/daemons"), - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/frr/frr.conf"), - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/network/interfaces"), - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/supervisor/conf.d/default-forge-dhcp-server.conf"), - }, - { - Id: "FileExists", - Target: cutil.GetPtr("/var/lib/hbn/etc/supervisor/conf.d/default-isc-dhcp-relay.conf"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/frr/daemons"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/frr/frr.conf"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/network/interfaces"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/supervisor/conf.d/default-forge-dhcp-server.conf"), - }, - { - Id: "FileIsValid", - Target: cutil.GetPtr("etc/supervisor/conf.d/default-isc-dhcp-relay.conf"), - }, - { - Id: "Ifreload", - Target: nil, - }, - { - Id: "RestrictedMode", - Target: nil, - }, - { - Id: "ServiceRunning", - Target: cutil.GetPtr("frr"), - }, - { - Id: "ServiceRunning", - Target: cutil.GetPtr("nl2doca"), - }, - { - Id: "ServiceRunning", - Target: cutil.GetPtr("rsyslog"), - }, - { - Id: "SupervisorctlStatus", - Target: nil, + Id: &corev1.MachineId{Id: m11.ControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{ + Health: &corev1.HealthReport{ + Source: "aggregate-host-health", + Successes: []*corev1.HealthProbeSuccess{ + { + Id: "BgpDaemonEnabled", + Target: nil, + }, + { + Id: "BgpStats", + Target: nil, + }, + { + Id: "ContainerExists", + Target: nil, + }, + { + Id: "DhcpServer", + Target: nil, + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/frr/daemons"), + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/frr/frr.conf"), + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/network/interfaces"), + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/supervisor/conf.d/default-forge-dhcp-server.conf"), + }, + { + Id: "FileExists", + Target: cutil.GetPtr("/var/lib/hbn/etc/supervisor/conf.d/default-isc-dhcp-relay.conf"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/frr/daemons"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/frr/frr.conf"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/network/interfaces"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/supervisor/conf.d/default-forge-dhcp-server.conf"), + }, + { + Id: "FileIsValid", + Target: cutil.GetPtr("etc/supervisor/conf.d/default-isc-dhcp-relay.conf"), + }, + { + Id: "Ifreload", + Target: nil, + }, + { + Id: "RestrictedMode", + Target: nil, + }, + { + Id: "ServiceRunning", + Target: cutil.GetPtr("frr"), + }, + { + Id: "ServiceRunning", + Target: cutil.GetPtr("nl2doca"), + }, + { + Id: "ServiceRunning", + Target: cutil.GetPtr("rsyslog"), + }, + { + Id: "SupervisorctlStatus", + Target: nil, + }, }, - }, - Alerts: []*corev1.HealthProbeAlert{ - { - Id: "HeartbeatTimeout", - Target: cutil.GetPtr("hardware-health"), - InAlertSince: nil, - Message: "", - TenantMessage: nil, - Classifications: []string{ - "PreventAllocations", - "PreventHostStateChanges", + Alerts: []*corev1.HealthProbeAlert{ + { + Id: "HeartbeatTimeout", + Target: cutil.GetPtr("hardware-health"), + InAlertSince: nil, + Message: "", + TenantMessage: nil, + Classifications: []string{ + "PreventAllocations", + "PreventHostStateChanges", + }, }, }, }, @@ -697,34 +693,34 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { // Machine in BOM validating state machineInfo11 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m12.ControllerMachineID}, - State: controllerMachineStatePrefixBomValidating + "/" + controllerMachineBomValidatingSubstateVerifyingSku, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m12.ControllerMachineID}, + State: controllerMachineStatePrefixBomValidating + "/" + controllerMachineBomValidatingSubstateVerifyingSku, + Status: &corev1.MachineStatus{}, }, } // Machine in BOM validating failure state machineInfo12 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m13.ControllerMachineID}, - State: controllerMachineStatePrefixBomValidating + "/" + controllerMachineBomValidatingSubstateSkuVerificationFailed, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m13.ControllerMachineID}, + State: controllerMachineStatePrefixBomValidating + "/" + controllerMachineBomValidatingSubstateSkuVerificationFailed, + Status: &corev1.MachineStatus{}, }, } machineInfo13 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m14.ControllerMachineID}, - State: controllerMachineStatePrefixReady, - DiscoveryInfo: &corev1.DiscoveryInfo{}, - Capabilities: &corev1.MachineCapabilitiesSet{ - Infiniband: []*corev1.MachineCapabilityAttributesInfiniband{ - { - Name: "MT2910 Family [ConnectX-7]", - Vendor: cutil.GetPtr(""), - Count: 2, - InactiveDevices: []uint32{}, + Id: &corev1.MachineId{Id: m14.ControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{ + DiscoveryInfo: &corev1.DiscoveryInfo{}, + Capabilities: &corev1.MachineCapabilitiesSet{ + Infiniband: []*corev1.MachineCapabilityAttributesInfiniband{ + { + Name: "MT2910 Family [ConnectX-7]", + Vendor: cutil.GetPtr(""), + Count: 2, + InactiveDevices: []uint32{}, + }, }, }, }, @@ -733,50 +729,45 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { machineInfo14 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m15.ControllerMachineID}, - State: "MachineValidation { machine_validation: MachineValidating { context: \"Discovery\", id: 9fff1002-2a49-48ae-8d77-8c2e795b59cb, completed: 1, total: 1, is_enabled: true } }", - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m15.ControllerMachineID}, + State: "MachineValidation { machine_validation: MachineValidating { context: \"Discovery\", id: 9fff1002-2a49-48ae-8d77-8c2e795b59cb, completed: 1, total: 1, is_enabled: true } }", + Status: &corev1.MachineStatus{}, }, } machineInfo15 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m16.ControllerMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, - InstanceTypeId: cutil.GetPtr(instanceTypeUpdated.ID.String()), + Id: &corev1.MachineId{Id: m16.ControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, + Config: &corev1.MachineConfig{InstanceTypeId: cutil.GetPtr(instanceTypeUpdated.ID.String())}, }, } machineInfo16 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m17.ControllerMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: m17.ControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, }, } machineInfo17 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: m18.ControllerMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, - InstanceTypeId: cutil.GetPtr(instanceTypeUnchanged.ID.String()), + Id: &corev1.MachineId{Id: m18.ControllerMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, + Config: &corev1.MachineConfig{InstanceTypeId: cutil.GetPtr(instanceTypeUnchanged.ID.String())}, }, } newWithInstanceTypeMachineID := uuid.NewString() machineInfo18 := &corev1.MachineInfo{ Machine: &corev1.Machine{ - Id: &corev1.MachineId{Id: newWithInstanceTypeMachineID}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, - InstanceTypeId: cutil.GetPtr(instanceTypeOriginal.ID.String()), + Id: &corev1.MachineId{Id: newWithInstanceTypeMachineID}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, + Config: &corev1.MachineConfig{InstanceTypeId: cutil.GetPtr(instanceTypeOriginal.ID.String())}, }, } @@ -805,10 +796,9 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { pagedInvMInfos := []*corev1.MachineInfo{} for i := 0; i < 34; i++ { mi := &corev1.Machine{ - Id: &corev1.MachineId{Id: pagedInvIds[i]}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: pagedInvIds[i]}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, } pagedInvMInfos = append(pagedInvMInfos, &corev1.MachineInfo{Machine: mi}) } @@ -1076,6 +1066,7 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { assert.Equal(t, len(um1.Labels), 3) + expectedCaps := machineInfo1.Machine.GetStatus().GetCapabilities() for _, mc := range mc1s { if mc.Type == cdbm.MachineCapabilityTypeCPU { // 9 Core CPU @@ -1109,15 +1100,15 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { if strings.Contains(mc.Name, "NVIDIA GB200") { assert.Equal(t, cdbm.MachineCapabilityDeviceTypeNVLink, *mc.DeviceType) assert.Equal(t, 4, *mc.Count) - assert.Equal(t, machineInfo1.Machine.Capabilities.Gpu[1].Name, mc.Name) - assert.Equal(t, *machineInfo1.Machine.Capabilities.Gpu[1].Capacity, *mc.Capacity) + assert.Equal(t, expectedCaps.Gpu[1].Name, mc.Name) + assert.Equal(t, *expectedCaps.Gpu[1].Capacity, *mc.Capacity) } if strings.Contains(mc.Name, "NVIDIA H100 PCIe") { assert.Equal(t, 1, *mc.Count) - assert.Equal(t, machineInfo1.Machine.Capabilities.Gpu[0].Name, mc.Name) - assert.Equal(t, *machineInfo1.Machine.Capabilities.Gpu[0].Frequency, *mc.Frequency) - assert.Equal(t, *machineInfo1.Machine.Capabilities.Gpu[0].Capacity, *mc.Capacity) + assert.Equal(t, expectedCaps.Gpu[0].Name, mc.Name) + assert.Equal(t, *expectedCaps.Gpu[0].Frequency, *mc.Frequency) + assert.Equal(t, *expectedCaps.Gpu[0].Capacity, *mc.Capacity) } } else if mc.Type == cdbm.MachineCapabilityTypeMemory { // 1 Memory @@ -1125,8 +1116,8 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { if mc.Name != "UNKNOWN" { assert.Equal(t, 8, *mc.Count) - assert.Equal(t, machineInfo1.Machine.Capabilities.Memory[0].Name, mc.Name) - assert.Equal(t, *machineInfo1.Machine.Capabilities.Memory[0].Capacity, *mc.Capacity) + assert.Equal(t, expectedCaps.Memory[0].Name, mc.Name) + assert.Equal(t, *expectedCaps.Memory[0].Capacity, *mc.Capacity) // Check that we are not deleting/recreating memory capabilities // We created the DDR4 capability in advance, and only the count should have changed. @@ -1135,7 +1126,7 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { } else { assert.Equal(t, 7, *mc.Count) - assert.Equal(t, machineInfo1.Machine.Capabilities.Memory[1].Name, mc.Name) + assert.Equal(t, expectedCaps.Memory[1].Name, mc.Name) assert.Nil(t, mc.Capacity) } @@ -1143,11 +1134,11 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { // 2 InfiniBand interfaces assert.Equal(t, 2, *mc.Count) - assert.Equal(t, machineInfo1.Machine.Capabilities.Infiniband[0].Name, mc.Name) + assert.Equal(t, expectedCaps.Infiniband[0].Name, mc.Name) - if assert.Equal(t, len(machineInfo1.Machine.Capabilities.Infiniband[0].InactiveDevices), len(mc.InactiveDevices)) { - for i := range machineInfo1.Machine.Capabilities.Infiniband[0].InactiveDevices { - assert.Equal(t, int(machineInfo1.Machine.Capabilities.Infiniband[0].InactiveDevices[i]), mc.InactiveDevices[i]) + if assert.Equal(t, len(expectedCaps.Infiniband[0].InactiveDevices), len(mc.InactiveDevices)) { + for i := range expectedCaps.Infiniband[0].InactiveDevices { + assert.Equal(t, int(expectedCaps.Infiniband[0].InactiveDevices[i]), mc.InactiveDevices[i]) } } @@ -1229,7 +1220,7 @@ func TestManageMachine_UpdateMachinesInDB(t *testing.T) { assert.Nil(t, serr) assert.Equal(t, um6.IsInMaintenance, true) assert.NotNil(t, um6.MaintenanceMessage) - assert.Equal(t, *um6.MaintenanceMessage, *machineInfo5.Machine.MaintenanceReference) + assert.Equal(t, *um6.MaintenanceMessage, *machineInfo5.Machine.GetConfig().MaintenanceReference) assert.Equal(t, um6.IsNetworkDegraded, false) assert.Nil(t, um6.NetworkHealthMessage) } @@ -1379,15 +1370,17 @@ func TestManageMachine_UpdateMachinesInDB_AddresslessInterface(t *testing.T) { Machine: &corev1.Machine{ Id: &corev1.MachineId{Id: machineID}, State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{ - { - Id: &corev1.MachineInterfaceId{Value: interfaceID.String()}, - MachineId: &corev1.MachineId{Id: machineID}, - SegmentId: &corev1.NetworkSegmentId{Value: uuid.NewString()}, - Address: nil, - Hostname: "addressless.example.com", - MacAddress: "00:00:00:00:00:00", - PrimaryInterface: true, + Status: &corev1.MachineStatus{ + Interfaces: []*corev1.MachineInterface{ + { + Id: &corev1.MachineInterfaceId{Value: interfaceID.String()}, + MachineId: &corev1.MachineId{Id: machineID}, + SegmentId: &corev1.NetworkSegmentId{Value: uuid.NewString()}, + Address: nil, + Hostname: "addressless.example.com", + MacAddress: "00:00:00:00:00:00", + PrimaryInterface: true, + }, }, }, }, @@ -1468,10 +1461,9 @@ func TestGetNICoMachineStatus(t *testing.T) { name: "test get NICo machine status - with prefix", args: args{ controllerMachine: &corev1.Machine{ - Id: &corev1.MachineId{Id: uuid.NewString()}, - State: fmt.Sprintf("%v/Test", controllerMachineStatePrefixAssigned), - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: uuid.NewString()}, + State: fmt.Sprintf("%v/Test", controllerMachineStatePrefixAssigned), + Status: &corev1.MachineStatus{}, }, }, wantStatus: cdbm.MachineStatusInUse, @@ -1481,10 +1473,9 @@ func TestGetNICoMachineStatus(t *testing.T) { name: "test get NICo machine status - without prefix", args: args{ controllerMachine: &corev1.Machine{ - Id: &corev1.MachineId{Id: uuid.NewString()}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - DiscoveryInfo: nil, + Id: &corev1.MachineId{Id: uuid.NewString()}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, }, }, wantStatus: cdbm.MachineStatusReady, @@ -1494,13 +1485,15 @@ func TestGetNICoMachineStatus(t *testing.T) { name: "test get NICo machine status - maintenance mode", args: args{ controllerMachine: &corev1.Machine{ - Id: &corev1.MachineId{Id: uuid.NewString()}, - State: controllerMachineStatePrefixReady, - Interfaces: []*corev1.MachineInterface{}, - MaintenanceStartTime: ×tamppb.Timestamp{ - Seconds: time.Now().Add(-time.Hour * 2).Unix(), + Id: &corev1.MachineId{Id: uuid.NewString()}, + State: controllerMachineStatePrefixReady, + Status: &corev1.MachineStatus{}, + Config: &corev1.MachineConfig{ + MaintenanceStartTime: ×tamppb.Timestamp{ + Seconds: time.Now().Add(-time.Hour * 2).Unix(), + }, + MaintenanceReference: cutil.GetPtr("test reason for maintenance"), }, - MaintenanceReference: cutil.GetPtr("test reason for maintenance"), }, }, wantStatus: cdbm.MachineStatusMaintenance, @@ -1521,7 +1514,7 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixReady, - Health: &corev1.HealthReport{ + Status: &corev1.MachineStatus{Health: &corev1.HealthReport{ Alerts: []*corev1.HealthProbeAlert{ { Classifications: []string{ @@ -1529,7 +1522,7 @@ func TestGetNICoMachineStatus(t *testing.T) { }, }, }, - }, + }}, }, }, wantStatus: cdbm.MachineStatusError, @@ -1540,7 +1533,7 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixReady, - Health: &corev1.HealthReport{ + Status: &corev1.MachineStatus{Health: &corev1.HealthReport{ Alerts: []*corev1.HealthProbeAlert{ { Id: MachineDPUFirmwareUpdateAlertID, @@ -1551,7 +1544,7 @@ func TestGetNICoMachineStatus(t *testing.T) { }, }, }, - }, + }}, }, }, wantStatus: cdbm.MachineStatusInitializing, @@ -1563,7 +1556,7 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixAssigned, - Health: &corev1.HealthReport{ + Status: &corev1.MachineStatus{Health: &corev1.HealthReport{ Alerts: []*corev1.HealthProbeAlert{ { Id: MachineDPUFirmwareUpdateAlertID, @@ -1574,7 +1567,7 @@ func TestGetNICoMachineStatus(t *testing.T) { }, }, }, - }, + }}, }, }, wantStatus: cdbm.MachineStatusInitializing, @@ -1586,7 +1579,7 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixReady, - Health: &corev1.HealthReport{ + Status: &corev1.MachineStatus{Health: &corev1.HealthReport{ Alerts: []*corev1.HealthProbeAlert{ { Id: MachineDPUFirmwareUpdateAlertID, @@ -1597,7 +1590,7 @@ func TestGetNICoMachineStatus(t *testing.T) { }, }, }, - }, + }}, }, }, wantStatus: cdbm.MachineStatusError, @@ -1608,8 +1601,8 @@ func TestGetNICoMachineStatus(t *testing.T) { name: "test tenant usable - Initializing, no alerts", args: args{ controllerMachine: &corev1.Machine{ - State: controllerMachineStatePrefixHostInitializing, - Interfaces: []*corev1.MachineInterface{}, + State: controllerMachineStatePrefixHostInitializing, + Status: &corev1.MachineStatus{}, }, }, wantStatus: cdbm.MachineStatusInitializing, @@ -1620,7 +1613,7 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixReady, - Health: &corev1.HealthReport{ + Status: &corev1.MachineStatus{Health: &corev1.HealthReport{ Alerts: []*corev1.HealthProbeAlert{ { Id: "TestAlert", @@ -1629,7 +1622,7 @@ func TestGetNICoMachineStatus(t *testing.T) { }, }, }, - }, + }}, }, }, wantStatus: cdbm.MachineStatusError, @@ -1640,14 +1633,14 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixAssigned, - Health: &corev1.HealthReport{ + Status: &corev1.MachineStatus{Health: &corev1.HealthReport{ Alerts: []*corev1.HealthProbeAlert{ { Id: "Maintenance", Target: cutil.GetPtr("Degraded"), }, }, - }, + }}, }, }, wantStatus: cdbm.MachineStatusInUse, @@ -1658,7 +1651,7 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixAssigned, - Health: &corev1.HealthReport{ + Status: &corev1.MachineStatus{Health: &corev1.HealthReport{ Alerts: []*corev1.HealthProbeAlert{ { Id: "PreventAlert", @@ -1671,7 +1664,7 @@ func TestGetNICoMachineStatus(t *testing.T) { Target: cutil.GetPtr("Degraded"), }, }, - }, + }}, }, }, wantStatus: cdbm.MachineStatusError, @@ -1682,14 +1675,14 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixReady, - Health: &corev1.HealthReport{ + Status: &corev1.MachineStatus{Health: &corev1.HealthReport{ Alerts: []*corev1.HealthProbeAlert{ { Id: "Maintenance", Target: cutil.GetPtr("Degraded"), }, }, - }, + }}, }, }, wantStatus: cdbm.MachineStatusReady, @@ -1700,8 +1693,10 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixReady, - MaintenanceStartTime: ×tamppb.Timestamp{ - Seconds: time.Now().Add(-time.Hour).Unix(), + Config: &corev1.MachineConfig{ + MaintenanceStartTime: ×tamppb.Timestamp{ + Seconds: time.Now().Add(-time.Hour).Unix(), + }, }, }, }, @@ -1733,7 +1728,7 @@ func TestGetNICoMachineStatus(t *testing.T) { args: args{ controllerMachine: &corev1.Machine{ State: controllerMachineStatePrefixAssigned, - Health: &corev1.HealthReport{ + Status: &corev1.MachineStatus{Health: &corev1.HealthReport{ Alerts: []*corev1.HealthProbeAlert{ { Classifications: []string{ @@ -1741,7 +1736,7 @@ func TestGetNICoMachineStatus(t *testing.T) { }, }, }, - }, + }}, }, }, wantStatus: cdbm.MachineStatusError,