diff --git a/ui/src/pages/admin/Nodes.tsx b/ui/src/pages/admin/Nodes.tsx index 4dff4473..8d5674bf 100644 --- a/ui/src/pages/admin/Nodes.tsx +++ b/ui/src/pages/admin/Nodes.tsx @@ -397,7 +397,7 @@ export default function AdminNodes() { }; const isNodeSchedulable = (node: NodeInfo) => { - return !node.taints.some(t => t.effect === 'NoSchedule' || t.effect === 'NoExecute'); + return !node.taints?.some(t => t.effect === 'NoSchedule' || t.effect === 'NoExecute'); }; if (loading) { @@ -494,7 +494,7 @@ export default function AdminNodes() { Total CPU - {stats.totalCapacity.cpu} + {stats.totalCapacity?.cpu ?? 'N/A'} {stats.totalUsage && ( @@ -519,7 +519,7 @@ export default function AdminNodes() { Total Memory - {stats.totalCapacity.memory} + {stats.totalCapacity?.memory ?? 'N/A'} {stats.totalUsage && ( @@ -537,6 +537,18 @@ export default function AdminNodes() { )} + {nodes.length === 0 && !loading && ( + + No nodes found. This could mean: + + Check that your kubeconfig is properly configured and the cluster is running. + + )} + {nodes.map((node) => ( @@ -551,7 +563,7 @@ export default function AdminNodes() { - {node.info.osImage} • {node.info.kubeletVersion} + {node.info?.osImage ?? 'Unknown OS'} • {node.info?.kubeletVersion ?? 'Unknown version'} {node.provider && ( @@ -579,7 +591,7 @@ export default function AdminNodes() { CPU - {node.allocatable.cpu} cores + {node.allocatable?.cpu ?? 'N/A'} cores {node.usage && ( @@ -592,7 +604,7 @@ export default function AdminNodes() { Memory - {node.allocatable.memory} + {node.allocatable?.memory ?? 'N/A'} {node.usage && ( @@ -605,10 +617,10 @@ export default function AdminNodes() { Pods - {node.pods} / {node.allocatable.pods} + {node.pods ?? 0} / {node.allocatable?.pods ?? 'N/A'} - {node.allocatable['nvidia.com/gpu'] && ( + {node.allocatable?.['nvidia.com/gpu'] && ( GPUs @@ -629,7 +641,7 @@ export default function AdminNodes() { setLabelDialogOpen(true); }} > - Labels ({Object.keys(node.labels).length}) + Labels ({Object.keys(node.labels ?? {}).length}) @@ -690,7 +702,7 @@ export default function AdminNodes() { Current Labels - {selectedNode && Object.entries(selectedNode.labels).map(([key, value]) => ( + {selectedNode && Object.entries(selectedNode.labels ?? {}).map(([key, value]) => ( - {selectedNode?.taints.map((taint) => ( + {selectedNode?.taints?.map((taint) => (