From a1d68ef93d227766c4942043a087a109a4234545 Mon Sep 17 00:00:00 2001 From: Andreas Fritzler Date: Wed, 13 May 2026 14:10:35 +0200 Subject: [PATCH] Add static visualizer demo page and set dim theme as default Add static visualizer demo page and set dim theme as default. Add a self-contained static HTML demo of the visualizer with embedded sample data (141 servers, 9 racks) that can be served via VitePress without a running backend. The demo starts in walk mode for an immersive first impression. Also switch the default theme from dark to dim in the live visualizer and fix init() to respect the currentTheme variable instead of hardcoding THEMES[0]. Signed-off-by: Andreas Fritzler --- REUSE.toml | 3 +- cmd/metalctl/app/visualizer.go | 17 +- config/samples/visualizer/servers.yaml | 2103 ++++++++++++++++++++++-- docs/public/visualizer-demo.html | 1 + docs/usage/metalctl.md | 10 +- internal/cmd/client/client.go | 16 +- internal/cmd/visualizer/index.html | 55 +- internal/cmd/visualizer/visualizer.go | 5 +- 8 files changed, 2066 insertions(+), 144 deletions(-) create mode 120000 docs/public/visualizer-demo.html diff --git a/REUSE.toml b/REUSE.toml index 0dece8811..27e8a6d06 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -27,7 +27,8 @@ path = [ "internal/cmd/visualizer/index.html", "test/data/*.json", "test/data/*.yaml", - "api/v1alpha1/zz_generated.deepcopy.go" + "api/v1alpha1/zz_generated.deepcopy.go", + "internal/cmd/visualizer/demo_data.json" ] precedence = "aggregate" SPDX-FileCopyrightText = "2024 SAP SE or an SAP affiliate company and IronCore contributors" diff --git a/cmd/metalctl/app/visualizer.go b/cmd/metalctl/app/visualizer.go index 3bee0c343..bbf7bccda 100644 --- a/cmd/metalctl/app/visualizer.go +++ b/cmd/metalctl/app/visualizer.go @@ -14,6 +14,7 @@ import ( var ( port int vizKubeContext string + vizDryRun bool ) func NewVisualizationCommand() *cobra.Command { @@ -29,6 +30,7 @@ func NewVisualizationCommand() *cobra.Command { visualizerCmd.Flags().StringVar(&kubeconfig, "kubeconfig", "", "Path to a kubeconfig.") visualizerCmd.Flags().StringVar(&vizKubeContext, "context", "", "Name of the kubeconfig context to use.") visualizerCmd.Flags().IntVar(&port, "port", 8080, "Port to run the web server on") + visualizerCmd.Flags().BoolVar(&vizDryRun, "dry-run", false, "Serve sample demo data without connecting to a cluster") return visualizerCmd } @@ -36,12 +38,17 @@ func NewVisualizationCommand() *cobra.Command { func runVisualizer(_ *cobra.Command, _ []string) error { log.Println("A 3D visualizer for server resources") - c, err := cmdclient.CreateClient(kubeconfig, vizKubeContext, scheme) - if err != nil { - log.Fatalf("Error creating kubernetes client: %v", err) + var vis *visualizer.Visualizer + if vizDryRun { + vis = visualizer.NewVisualizer(nil, port) + vis.DryRun = true + } else { + c, err := cmdclient.CreateClient(kubeconfig, vizKubeContext, scheme) + if err != nil { + log.Fatalf("Error creating kubernetes client: %v", err) + } + vis = visualizer.NewVisualizer(c, port) } - vis := visualizer.NewVisualizer(c, port) - return vis.StartAndServe() } diff --git a/config/samples/visualizer/servers.yaml b/config/samples/visualizer/servers.yaml index d9a24995a..420ce55c7 100644 --- a/config/samples/visualizer/servers.yaml +++ b/config/samples/visualizer/servers.yaml @@ -1,5 +1,6 @@ -# Demo servers: 3 rows (lanes) × 3 racks × 2-3 servers = 24 servers +# Demo servers: 3 rows (lanes) x 3 racks x ~10 servers = ~90 servers # Rack label format: "-" (e.g. "1-2" = row 1, rack 2) +# Each rack is 42U; servers are 1U, 2U, or 4U. # States / LEDs are varied to showcase all visualizer colors. --- # ── Row 1, Rack 1 ────────────────────────────────────────────────────────────── @@ -26,7 +27,7 @@ metadata: labels: metadata.metal.ironcore.dev/location: DEMO-DC1 metadata.metal.ironcore.dev/rack: "1-1" - metadata.metal.ironcore.dev/shelf: "4" + metadata.metal.ironcore.dev/shelf: "3" metadata.metal.ironcore.dev/height: "2" spec: systemUUID: "00000000-0000-0000-0001-000100010002" @@ -42,8 +43,8 @@ metadata: labels: metadata.metal.ironcore.dev/location: DEMO-DC1 metadata.metal.ironcore.dev/rack: "1-1" - metadata.metal.ironcore.dev/shelf: "7" - metadata.metal.ironcore.dev/height: "2" + metadata.metal.ironcore.dev/shelf: "5" + metadata.metal.ironcore.dev/height: "4" spec: systemUUID: "00000000-0000-0000-0001-000100010003" indicatorLED: "Blinking" @@ -51,100 +52,97 @@ status: powerState: "On" state: "Reserved" --- -# ── Row 1, Rack 2 ────────────────────────────────────────────────────────────── apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r1-rk2-srv1 + name: demo-r1-rk1-srv4 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "1-2" - metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "9" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000100020001" + systemUUID: "00000000-0000-0000-0001-000100010004" indicatorLED: "Off" status: powerState: "On" - state: "Available" + state: "Discovery" --- apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r1-rk2-srv2 + name: demo-r1-rk1-srv5 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "1-2" - metadata.metal.ironcore.dev/shelf: "4" + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "11" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000100020002" + systemUUID: "00000000-0000-0000-0001-000100010005" indicatorLED: "Lit" status: powerState: "On" - state: "Error" + state: "Available" --- apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r1-rk2-srv3 + name: demo-r1-rk1-srv6 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "1-2" - metadata.metal.ironcore.dev/shelf: "7" - metadata.metal.ironcore.dev/height: "2" + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "13" + metadata.metal.ironcore.dev/height: "4" spec: - systemUUID: "00000000-0000-0000-0001-000100020003" + systemUUID: "00000000-0000-0000-0001-000100010006" indicatorLED: "Off" status: - powerState: "Off" + powerState: "On" state: "Maintenance" --- -# ── Row 1, Rack 3 ────────────────────────────────────────────────────────────── apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r1-rk3-srv1 + name: demo-r1-rk1-srv7 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "1-3" - metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "17" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000100030001" - indicatorLED: "Off" + systemUUID: "00000000-0000-0000-0001-000100010007" + indicatorLED: "Blinking" status: powerState: "On" - state: "Discovery" + state: "Reserved" --- apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r1-rk3-srv2 + name: demo-r1-rk1-srv8 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "1-3" - metadata.metal.ironcore.dev/shelf: "4" - metadata.metal.ironcore.dev/height: "2" + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "19" + metadata.metal.ironcore.dev/height: "1" spec: - systemUUID: "00000000-0000-0000-0001-000100030002" + systemUUID: "00000000-0000-0000-0001-000100010008" indicatorLED: "Off" status: powerState: "Off" state: "Initial" --- -# ── Row 2, Rack 1 ────────────────────────────────────────────────────────────── apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r2-rk1-srv1 + name: demo-r1-rk1-srv9 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "2-1" - metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "20" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000200010001" + systemUUID: "00000000-0000-0000-0001-000100010009" indicatorLED: "Lit" status: powerState: "On" @@ -153,14 +151,62 @@ status: apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r2-rk1-srv2 + name: demo-r1-rk1-srv10 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "2-1" - metadata.metal.ironcore.dev/shelf: "4" + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "22" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100010010" + indicatorLED: "Off" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk1-srv11 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "26" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000200010002" + systemUUID: "00000000-0000-0000-0001-000100010011" + indicatorLED: "Off" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk1-srv12 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "28" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100010012" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk1-srv13 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "30" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100010013" indicatorLED: "Blinking" status: powerState: "On" @@ -169,113 +215,143 @@ status: apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r2-rk1-srv3 + name: demo-r1-rk1-srv14 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "2-1" - metadata.metal.ironcore.dev/shelf: "7" + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "34" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000200010003" + systemUUID: "00000000-0000-0000-0001-000100010014" indicatorLED: "Off" status: - powerState: "Off" + powerState: "On" state: "Available" --- -# ── Row 2, Rack 2 ────────────────────────────────────────────────────────────── apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r2-rk2-srv1 + name: demo-r1-rk1-srv15 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "2-2" - metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "36" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000200020001" + systemUUID: "00000000-0000-0000-0001-000100010015" indicatorLED: "Lit" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk1-srv16 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-1" + metadata.metal.ironcore.dev/shelf: "38" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100010016" + indicatorLED: "Off" status: powerState: "On" state: "Available" --- +# ── Row 1, Rack 2 ────────────────────────────────────────────────────────────── apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r2-rk2-srv2 + name: demo-r1-rk2-srv1 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "2-2" - metadata.metal.ironcore.dev/shelf: "4" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "1" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000200020002" + systemUUID: "00000000-0000-0000-0001-000100020001" indicatorLED: "Off" status: powerState: "On" - state: "Error" + state: "Available" --- apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r2-rk2-srv3 + name: demo-r1-rk2-srv2 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "2-2" - metadata.metal.ironcore.dev/shelf: "7" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "3" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000200020003" - indicatorLED: "Blinking" + systemUUID: "00000000-0000-0000-0001-000100020002" + indicatorLED: "Lit" status: powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk2-srv3 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "5" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100020003" + indicatorLED: "Off" +status: + powerState: "Off" state: "Maintenance" --- -# ── Row 2, Rack 3 ────────────────────────────────────────────────────────────── apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r2-rk3-srv1 + name: demo-r1-rk2-srv4 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "2-3" - metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "9" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000200030001" - indicatorLED: "Lit" + systemUUID: "00000000-0000-0000-0001-000100020004" + indicatorLED: "Blinking" status: powerState: "On" - state: "Available" + state: "Reserved" --- apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r2-rk3-srv2 + name: demo-r1-rk2-srv5 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "2-3" - metadata.metal.ironcore.dev/shelf: "4" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "11" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000200030002" + systemUUID: "00000000-0000-0000-0001-000100020005" indicatorLED: "Off" status: - powerState: "Off" - state: "Discovery" + powerState: "On" + state: "Available" --- -# ── Row 3, Rack 1 ────────────────────────────────────────────────────────────── apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r3-rk1-srv1 + name: demo-r1-rk2-srv6 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "3-1" - metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "13" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000300010001" + systemUUID: "00000000-0000-0000-0001-000100020006" indicatorLED: "Lit" status: powerState: "On" @@ -284,47 +360,94 @@ status: apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r3-rk1-srv2 + name: demo-r1-rk2-srv7 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "3-1" - metadata.metal.ironcore.dev/shelf: "4" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "15" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100020007" + indicatorLED: "Off" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk2-srv8 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "19" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000300010002" + systemUUID: "00000000-0000-0000-0001-000100020008" indicatorLED: "Off" status: powerState: "Off" - state: "Reserved" + state: "Initial" --- apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r3-rk1-srv3 + name: demo-r1-rk2-srv9 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "3-1" - metadata.metal.ironcore.dev/shelf: "7" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "21" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000300010003" + systemUUID: "00000000-0000-0000-0001-000100020009" indicatorLED: "Blinking" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk2-srv10 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "23" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100020010" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk2-srv11 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "27" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100020011" + indicatorLED: "Off" status: powerState: "On" state: "Error" --- -# ── Row 3, Rack 2 ────────────────────────────────────────────────────────────── apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r3-rk2-srv1 + name: demo-r1-rk2-srv12 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "3-2" - metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "29" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000300020001" + systemUUID: "00000000-0000-0000-0001-000100020012" indicatorLED: "Off" status: powerState: "On" @@ -333,63 +456,1813 @@ status: apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r3-rk2-srv2 + name: demo-r1-rk2-srv13 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "3-2" - metadata.metal.ironcore.dev/shelf: "4" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "31" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000300020002" + systemUUID: "00000000-0000-0000-0001-000100020013" indicatorLED: "Lit" status: powerState: "On" state: "Maintenance" --- -# ── Row 3, Rack 3 ────────────────────────────────────────────────────────────── apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r3-rk3-srv1 + name: demo-r1-rk2-srv14 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "3-3" - metadata.metal.ironcore.dev/shelf: "1" - metadata.metal.ironcore.dev/height: "2" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "33" + metadata.metal.ironcore.dev/height: "4" spec: - systemUUID: "00000000-0000-0000-0001-000300030001" + systemUUID: "00000000-0000-0000-0001-000100020014" indicatorLED: "Off" status: - powerState: "Off" - state: "Initial" + powerState: "On" + state: "Reserved" --- apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r3-rk3-srv2 + name: demo-r1-rk2-srv15 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "3-3" - metadata.metal.ironcore.dev/shelf: "4" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "37" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000300030002" + systemUUID: "00000000-0000-0000-0001-000100020015" indicatorLED: "Blinking" status: powerState: "On" - state: "Discovery" + state: "Available" --- apiVersion: metal.ironcore.dev/v1alpha1 kind: Server metadata: - name: demo-r3-rk3-srv3 + name: demo-r1-rk2-srv16 labels: metadata.metal.ironcore.dev/location: DEMO-DC1 - metadata.metal.ironcore.dev/rack: "3-3" - metadata.metal.ironcore.dev/shelf: "7" + metadata.metal.ironcore.dev/rack: "1-2" + metadata.metal.ironcore.dev/shelf: "39" metadata.metal.ironcore.dev/height: "2" spec: - systemUUID: "00000000-0000-0000-0001-000300030003" + systemUUID: "00000000-0000-0000-0001-000100020016" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +# ── Row 1, Rack 3 ────────────────────────────────────────────────────────────── +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv1 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100030001" + indicatorLED: "Off" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv2 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "5" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030002" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Initial" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv3 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "7" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030003" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv4 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "9" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100030004" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv5 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "13" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030005" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv6 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "15" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030006" + indicatorLED: "Off" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv7 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "17" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030007" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv8 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "19" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100030008" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv9 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "23" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030009" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv10 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "25" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030010" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv11 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "27" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100030011" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv12 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "31" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030012" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv13 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "33" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030013" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv14 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "35" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000100030014" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Initial" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r1-rk3-srv15 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "1-3" + metadata.metal.ironcore.dev/shelf: "37" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000100030015" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +# ── Row 2, Rack 1 ────────────────────────────────────────────────────────────── +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv1 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010001" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv2 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "3" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010002" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv3 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "5" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200010003" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv4 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "9" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010004" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv5 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "11" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010005" + indicatorLED: "Off" +status: + powerState: "On" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv6 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "13" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010006" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv7 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "15" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200010007" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv8 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "19" + metadata.metal.ironcore.dev/height: "1" +spec: + systemUUID: "00000000-0000-0000-0001-000200010008" + indicatorLED: "Off" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv9 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "20" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010009" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv10 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "22" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010010" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Initial" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv11 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "24" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200010011" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv12 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "28" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010012" + indicatorLED: "Off" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv13 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "30" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010013" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv14 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "32" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200010014" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv15 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "36" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200010015" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk1-srv16 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-1" + metadata.metal.ironcore.dev/shelf: "38" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200010016" + indicatorLED: "Off" +status: + powerState: "On" + state: "Maintenance" +--- +# ── Row 2, Rack 2 ────────────────────────────────────────────────────────────── +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv1 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020001" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv2 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "3" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020002" + indicatorLED: "Off" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv3 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "5" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020003" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv4 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "7" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200020004" + indicatorLED: "Off" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv5 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "11" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020005" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv6 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "13" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020006" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv7 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "15" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200020007" + indicatorLED: "Off" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv8 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "19" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020008" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv9 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "21" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020009" + indicatorLED: "Off" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv10 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "23" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200020010" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv11 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "27" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020011" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv12 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "29" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020012" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv13 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "31" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020013" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Initial" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv14 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "33" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200020014" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv15 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "37" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020015" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk2-srv16 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-2" + metadata.metal.ironcore.dev/shelf: "39" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200020016" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +# ── Row 2, Rack 3 ────────────────────────────────────────────────────────────── +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv1 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200030001" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv2 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "5" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030002" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv3 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "7" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030003" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv4 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "9" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030004" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv5 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "11" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200030005" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv6 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "15" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030006" + indicatorLED: "Off" +status: + powerState: "On" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv7 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "17" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030007" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv8 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "19" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200030008" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv9 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "23" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030009" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv10 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "25" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030010" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Initial" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv11 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "27" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030011" + indicatorLED: "Off" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv12 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "29" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200030012" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv13 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "33" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030013" + indicatorLED: "Off" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv14 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "35" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000200030014" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r2-rk3-srv15 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "2-3" + metadata.metal.ironcore.dev/shelf: "37" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000200030015" + indicatorLED: "Off" +status: + powerState: "On" + state: "Maintenance" +--- +# ── Row 3, Rack 1 ────────────────────────────────────────────────────────────── +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv1 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010001" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv2 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "3" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010002" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv3 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "5" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300010003" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv4 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "9" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010004" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv5 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "11" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010005" + indicatorLED: "Off" +status: + powerState: "On" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv6 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "13" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010006" + indicatorLED: "Off" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv7 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "15" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300010007" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv8 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "19" + metadata.metal.ironcore.dev/height: "1" +spec: + systemUUID: "00000000-0000-0000-0001-000300010008" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv9 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "20" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010009" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv10 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "22" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300010010" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Initial" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv11 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "26" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010011" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv12 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "28" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010012" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv13 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "30" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300010013" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv14 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "34" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010014" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv15 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "36" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300010015" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk1-srv16 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-1" + metadata.metal.ironcore.dev/shelf: "38" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300010016" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +# ── Row 3, Rack 2 ────────────────────────────────────────────────────────────── +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv1 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020001" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv2 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "3" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020002" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv3 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "5" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300020003" + indicatorLED: "Off" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv4 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "9" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020004" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv5 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "11" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020005" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv6 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "13" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020006" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv7 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "15" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300020007" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv8 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "19" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020008" + indicatorLED: "Off" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv9 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "21" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020009" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv10 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "23" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300020010" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv11 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "27" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020011" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv12 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "29" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020012" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Initial" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv13 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "31" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300020013" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv14 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "35" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020014" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv15 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "37" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020015" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk2-srv16 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-2" + metadata.metal.ironcore.dev/shelf: "39" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300020016" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +# ── Row 3, Rack 3 ────────────────────────────────────────────────────────────── +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv1 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "1" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300030001" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Initial" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv2 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "5" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030002" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv3 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "7" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030003" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv4 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "9" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300030004" + indicatorLED: "Off" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv5 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "13" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030005" + indicatorLED: "Off" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv6 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "15" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030006" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv7 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "17" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030007" + indicatorLED: "Off" +status: + powerState: "Off" + state: "Maintenance" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv8 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "19" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300030008" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv9 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "23" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030009" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv10 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "25" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030010" + indicatorLED: "Off" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv11 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "27" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300030011" + indicatorLED: "Off" +status: + powerState: "On" + state: "Discovery" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv12 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "31" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030012" + indicatorLED: "Lit" +status: + powerState: "On" + state: "Available" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv13 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "33" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030013" + indicatorLED: "Off" +status: + powerState: "On" + state: "Error" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv14 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "35" + metadata.metal.ironcore.dev/height: "4" +spec: + systemUUID: "00000000-0000-0000-0001-000300030014" + indicatorLED: "Blinking" +status: + powerState: "On" + state: "Reserved" +--- +apiVersion: metal.ironcore.dev/v1alpha1 +kind: Server +metadata: + name: demo-r3-rk3-srv15 + labels: + metadata.metal.ironcore.dev/location: DEMO-DC1 + metadata.metal.ironcore.dev/rack: "3-3" + metadata.metal.ironcore.dev/shelf: "39" + metadata.metal.ironcore.dev/height: "2" +spec: + systemUUID: "00000000-0000-0000-0001-000300030015" indicatorLED: "Lit" status: powerState: "On" diff --git a/docs/public/visualizer-demo.html b/docs/public/visualizer-demo.html new file mode 120000 index 000000000..8c91d912a --- /dev/null +++ b/docs/public/visualizer-demo.html @@ -0,0 +1 @@ +../../internal/cmd/visualizer/index.html \ No newline at end of file diff --git a/docs/usage/metalctl.md b/docs/usage/metalctl.md index b1ebf9e16..cd09294ec 100644 --- a/docs/usage/metalctl.md +++ b/docs/usage/metalctl.md @@ -5,7 +5,7 @@ Install the `metalctl` CLI from source without cloning the repository. Requires [Go](https://go.dev) to be installed. ```bash -go install https://github.com/ironcore-dev/metal-operator/cmd/metalctl@latest +go install github.com/ironcore-dev/metal-operator/cmd/metalctl@latest ``` ## Commands @@ -24,6 +24,14 @@ In order to access the 3D visualization, open your browser and navigate to `http You can configure the port by setting the `--port` flag. +To preview the visualizer with sample data (no cluster connection required), use the `--dry-run` flag: + +```bash +metalctl visualizer --dry-run +``` + +Open interactive demo + ### console The `metalctl console` command allows you to access the serial console of a `Server`. diff --git a/internal/cmd/client/client.go b/internal/cmd/client/client.go index d6cc3fa8d..f8d039bc0 100644 --- a/internal/cmd/client/client.go +++ b/internal/cmd/client/client.go @@ -16,18 +16,16 @@ import ( func CreateClient(kubeconfig, context string, scheme *runtime.Scheme) (client.Client, error) { if len(kubeconfig) == 0 { kubeconfig = os.Getenv("KUBECONFIG") - if kubeconfig == "" { - fmt.Println("Error: --kubeconfig flag or KUBECONFIG environment variable must be set") - os.Exit(1) - } } loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() - paths := filepath.SplitList(kubeconfig) - if len(paths) == 1 { - loadingRules.ExplicitPath = kubeconfig - } else { - loadingRules.Precedence = paths + if kubeconfig != "" { + paths := filepath.SplitList(kubeconfig) + if len(paths) == 1 { + loadingRules.ExplicitPath = kubeconfig + } else { + loadingRules.Precedence = paths + } } overrides := &clientcmd.ConfigOverrides{} if context != "" { diff --git a/internal/cmd/visualizer/index.html b/internal/cmd/visualizer/index.html index 2162f8cf8..3a8f9b045 100644 --- a/internal/cmd/visualizer/index.html +++ b/internal/cmd/visualizer/index.html @@ -82,8 +82,8 @@
LED: Lit = solid  |  Blinking = pulsing  |  Off = dark
- - + +
Click server to pin
@@ -131,7 +131,6 @@ const U_GAP = 0.08; const RACK_TOTAL_U = 42; const RACK_FRAME_HEIGHT = RACK_TOTAL_U * (U_HEIGHT + U_GAP) + 1; - const REFRESH_INTERVAL = 10000; const LANE_DEPTH = RACK_DEPTH + 4; const AISLE_WIDTH = 20; @@ -150,7 +149,7 @@ { key: 'dim', bg: 0x141a26, fogNear: 100, fogFar: 300, floor: 0x161c2a, grid: 0x202840, ambientColor: 0x9090b0, ambientInt: 0.6, ceil: 0x141a26, ceilSide: THREE.BackSide }, { key: 'light', bg: 0xdde4ec, fogNear: 120, fogFar: 400, floor: 0xc8d0da, grid: 0xb0b8c4, ambientColor: 0xffffff, ambientInt: 1.0, ceil: 0xdde4ec, ceilSide: THREE.BackSide }, ]; - let currentTheme = 0; + let currentTheme = 1; let ambientLight, floorMesh, ceilMesh, gridHelper; // --------------------------------------------------------------------------- @@ -169,8 +168,8 @@ // --------------------------------------------------------------------------- function init() { scene = new THREE.Scene(); - scene.background = new THREE.Color(THEMES[0].bg); - scene.fog = new THREE.Fog(THEMES[0].bg, THEMES[0].fogNear, THEMES[0].fogFar); + scene.background = new THREE.Color(THEMES[currentTheme].bg); + scene.fog = new THREE.Fog(THEMES[currentTheme].bg, THEMES[currentTheme].fogNear, THEMES[currentTheme].fogFar); scene.add(rackGroup); camera = new THREE.PerspectiveCamera(55, window.innerWidth / window.innerHeight, 0.1, 1000); @@ -184,7 +183,7 @@ document.body.appendChild(renderer.domElement); // Lighting - ambientLight = new THREE.AmbientLight(THEMES[0].ambientColor, THEMES[0].ambientInt); + ambientLight = new THREE.AmbientLight(THEMES[currentTheme].ambientColor, THEMES[currentTheme].ambientInt); scene.add(ambientLight); const sun = new THREE.DirectionalLight(0xffffff, 0.9); @@ -210,21 +209,21 @@ // Floor floorMesh = new THREE.Mesh( new THREE.PlaneGeometry(2000, 2000), - new THREE.MeshStandardMaterial({ color: THEMES[0].floor, roughness: 1 }) + new THREE.MeshStandardMaterial({ color: THEMES[currentTheme].floor, roughness: 1 }) ); floorMesh.rotation.x = -Math.PI / 2; floorMesh.position.y = -0.1; floorMesh.receiveShadow = true; scene.add(floorMesh); - gridHelper = new THREE.GridHelper(600, 120, THEMES[0].grid, THEMES[0].grid); + gridHelper = new THREE.GridHelper(600, 120, THEMES[currentTheme].grid, THEMES[currentTheme].grid); gridHelper.position.y = -0.05; scene.add(gridHelper); // Ceiling ceilMesh = new THREE.Mesh( new THREE.PlaneGeometry(2000, 2000), - new THREE.MeshStandardMaterial({ color: THEMES[0].ceil, side: THREE.BackSide }) + new THREE.MeshStandardMaterial({ color: THEMES[currentTheme].ceil, side: THREE.BackSide }) ); ceilMesh.rotation.x = -Math.PI / 2; ceilMesh.position.y = RACK_FRAME_HEIGHT + 12; @@ -270,7 +269,6 @@ document.addEventListener('click', onMouseClick); fetchServers(); - setInterval(fetchServers, REFRESH_INTERVAL); animate(); } @@ -344,6 +342,13 @@ scene._stripLights = []; } + // --------------------------------------------------------------------------- + // Static fallback data (used when /api/servers is unavailable) + // --------------------------------------------------------------------------- + const DEMO_SERVERS = [{"name":"demo-r1-rk1-srv1","location":"DEMO-DC1","rack":"1-1","shelf":1,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r1-rk1-srv2","location":"DEMO-DC1","rack":"1-1","shelf":3,"height":2,"power":"Off","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk1-srv3","location":"DEMO-DC1","rack":"1-1","shelf":5,"height":4,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r1-rk1-srv4","location":"DEMO-DC1","rack":"1-1","shelf":9,"height":2,"power":"On","indicatorLED":"Off","state":"Discovery"},{"name":"demo-r1-rk1-srv5","location":"DEMO-DC1","rack":"1-1","shelf":11,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r1-rk1-srv6","location":"DEMO-DC1","rack":"1-1","shelf":13,"height":4,"power":"On","indicatorLED":"Off","state":"Maintenance"},{"name":"demo-r1-rk1-srv7","location":"DEMO-DC1","rack":"1-1","shelf":17,"height":2,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r1-rk1-srv8","location":"DEMO-DC1","rack":"1-1","shelf":19,"height":1,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r1-rk1-srv9","location":"DEMO-DC1","rack":"1-1","shelf":20,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r1-rk1-srv10","location":"DEMO-DC1","rack":"1-1","shelf":22,"height":4,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r1-rk1-srv11","location":"DEMO-DC1","rack":"1-1","shelf":26,"height":2,"power":"On","indicatorLED":"Off","state":"Error"},{"name":"demo-r1-rk1-srv12","location":"DEMO-DC1","rack":"1-1","shelf":28,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r1-rk1-srv13","location":"DEMO-DC1","rack":"1-1","shelf":30,"height":4,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r1-rk1-srv14","location":"DEMO-DC1","rack":"1-1","shelf":34,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk1-srv15","location":"DEMO-DC1","rack":"1-1","shelf":36,"height":2,"power":"On","indicatorLED":"Lit","state":"Discovery"},{"name":"demo-r1-rk1-srv16","location":"DEMO-DC1","rack":"1-1","shelf":38,"height":4,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk2-srv1","location":"DEMO-DC1","rack":"1-2","shelf":1,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk2-srv2","location":"DEMO-DC1","rack":"1-2","shelf":3,"height":2,"power":"On","indicatorLED":"Lit","state":"Error"},{"name":"demo-r1-rk2-srv3","location":"DEMO-DC1","rack":"1-2","shelf":5,"height":4,"power":"Off","indicatorLED":"Off","state":"Maintenance"},{"name":"demo-r1-rk2-srv4","location":"DEMO-DC1","rack":"1-2","shelf":9,"height":2,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r1-rk2-srv5","location":"DEMO-DC1","rack":"1-2","shelf":11,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk2-srv6","location":"DEMO-DC1","rack":"1-2","shelf":13,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r1-rk2-srv7","location":"DEMO-DC1","rack":"1-2","shelf":15,"height":4,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r1-rk2-srv8","location":"DEMO-DC1","rack":"1-2","shelf":19,"height":2,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r1-rk2-srv9","location":"DEMO-DC1","rack":"1-2","shelf":21,"height":2,"power":"On","indicatorLED":"Blinking","state":"Discovery"},{"name":"demo-r1-rk2-srv10","location":"DEMO-DC1","rack":"1-2","shelf":23,"height":4,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r1-rk2-srv11","location":"DEMO-DC1","rack":"1-2","shelf":27,"height":2,"power":"On","indicatorLED":"Off","state":"Error"},{"name":"demo-r1-rk2-srv12","location":"DEMO-DC1","rack":"1-2","shelf":29,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk2-srv13","location":"DEMO-DC1","rack":"1-2","shelf":31,"height":2,"power":"On","indicatorLED":"Lit","state":"Maintenance"},{"name":"demo-r1-rk2-srv14","location":"DEMO-DC1","rack":"1-2","shelf":33,"height":4,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r1-rk2-srv15","location":"DEMO-DC1","rack":"1-2","shelf":37,"height":2,"power":"On","indicatorLED":"Blinking","state":"Available"},{"name":"demo-r1-rk2-srv16","location":"DEMO-DC1","rack":"1-2","shelf":39,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk3-srv1","location":"DEMO-DC1","rack":"1-3","shelf":1,"height":4,"power":"On","indicatorLED":"Off","state":"Discovery"},{"name":"demo-r1-rk3-srv2","location":"DEMO-DC1","rack":"1-3","shelf":5,"height":2,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r1-rk3-srv3","location":"DEMO-DC1","rack":"1-3","shelf":7,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r1-rk3-srv4","location":"DEMO-DC1","rack":"1-3","shelf":9,"height":4,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r1-rk3-srv5","location":"DEMO-DC1","rack":"1-3","shelf":13,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r1-rk3-srv6","location":"DEMO-DC1","rack":"1-3","shelf":15,"height":2,"power":"On","indicatorLED":"Off","state":"Error"},{"name":"demo-r1-rk3-srv7","location":"DEMO-DC1","rack":"1-3","shelf":17,"height":2,"power":"Off","indicatorLED":"Off","state":"Maintenance"},{"name":"demo-r1-rk3-srv8","location":"DEMO-DC1","rack":"1-3","shelf":19,"height":4,"power":"On","indicatorLED":"Lit","state":"Reserved"},{"name":"demo-r1-rk3-srv9","location":"DEMO-DC1","rack":"1-3","shelf":23,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk3-srv10","location":"DEMO-DC1","rack":"1-3","shelf":25,"height":2,"power":"On","indicatorLED":"Blinking","state":"Discovery"},{"name":"demo-r1-rk3-srv11","location":"DEMO-DC1","rack":"1-3","shelf":27,"height":4,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk3-srv12","location":"DEMO-DC1","rack":"1-3","shelf":31,"height":2,"power":"On","indicatorLED":"Lit","state":"Reserved"},{"name":"demo-r1-rk3-srv13","location":"DEMO-DC1","rack":"1-3","shelf":33,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r1-rk3-srv14","location":"DEMO-DC1","rack":"1-3","shelf":35,"height":2,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r1-rk3-srv15","location":"DEMO-DC1","rack":"1-3","shelf":37,"height":4,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk1-srv1","location":"DEMO-DC1","rack":"2-1","shelf":1,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk1-srv2","location":"DEMO-DC1","rack":"2-1","shelf":3,"height":2,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r2-rk1-srv3","location":"DEMO-DC1","rack":"2-1","shelf":5,"height":4,"power":"Off","indicatorLED":"Off","state":"Available"},{"name":"demo-r2-rk1-srv4","location":"DEMO-DC1","rack":"2-1","shelf":9,"height":2,"power":"On","indicatorLED":"Lit","state":"Error"},{"name":"demo-r2-rk1-srv5","location":"DEMO-DC1","rack":"2-1","shelf":11,"height":2,"power":"On","indicatorLED":"Off","state":"Maintenance"},{"name":"demo-r2-rk1-srv6","location":"DEMO-DC1","rack":"2-1","shelf":13,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r2-rk1-srv7","location":"DEMO-DC1","rack":"2-1","shelf":15,"height":4,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r2-rk1-srv8","location":"DEMO-DC1","rack":"2-1","shelf":19,"height":1,"power":"On","indicatorLED":"Off","state":"Discovery"},{"name":"demo-r2-rk1-srv9","location":"DEMO-DC1","rack":"2-1","shelf":20,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk1-srv10","location":"DEMO-DC1","rack":"2-1","shelf":22,"height":2,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r2-rk1-srv11","location":"DEMO-DC1","rack":"2-1","shelf":24,"height":4,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk1-srv12","location":"DEMO-DC1","rack":"2-1","shelf":28,"height":2,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r2-rk1-srv13","location":"DEMO-DC1","rack":"2-1","shelf":30,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r2-rk1-srv14","location":"DEMO-DC1","rack":"2-1","shelf":32,"height":4,"power":"On","indicatorLED":"Blinking","state":"Error"},{"name":"demo-r2-rk1-srv15","location":"DEMO-DC1","rack":"2-1","shelf":36,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk1-srv16","location":"DEMO-DC1","rack":"2-1","shelf":38,"height":4,"power":"On","indicatorLED":"Off","state":"Maintenance"},{"name":"demo-r2-rk2-srv1","location":"DEMO-DC1","rack":"2-2","shelf":1,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk2-srv2","location":"DEMO-DC1","rack":"2-2","shelf":3,"height":2,"power":"On","indicatorLED":"Off","state":"Error"},{"name":"demo-r2-rk2-srv3","location":"DEMO-DC1","rack":"2-2","shelf":5,"height":2,"power":"On","indicatorLED":"Blinking","state":"Maintenance"},{"name":"demo-r2-rk2-srv4","location":"DEMO-DC1","rack":"2-2","shelf":7,"height":4,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r2-rk2-srv5","location":"DEMO-DC1","rack":"2-2","shelf":11,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk2-srv6","location":"DEMO-DC1","rack":"2-2","shelf":13,"height":2,"power":"Off","indicatorLED":"Off","state":"Available"},{"name":"demo-r2-rk2-srv7","location":"DEMO-DC1","rack":"2-2","shelf":15,"height":4,"power":"On","indicatorLED":"Off","state":"Discovery"},{"name":"demo-r2-rk2-srv8","location":"DEMO-DC1","rack":"2-2","shelf":19,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk2-srv9","location":"DEMO-DC1","rack":"2-2","shelf":21,"height":2,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r2-rk2-srv10","location":"DEMO-DC1","rack":"2-2","shelf":23,"height":4,"power":"On","indicatorLED":"Blinking","state":"Error"},{"name":"demo-r2-rk2-srv11","location":"DEMO-DC1","rack":"2-2","shelf":27,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r2-rk2-srv12","location":"DEMO-DC1","rack":"2-2","shelf":29,"height":2,"power":"On","indicatorLED":"Lit","state":"Maintenance"},{"name":"demo-r2-rk2-srv13","location":"DEMO-DC1","rack":"2-2","shelf":31,"height":2,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r2-rk2-srv14","location":"DEMO-DC1","rack":"2-2","shelf":33,"height":4,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r2-rk2-srv15","location":"DEMO-DC1","rack":"2-2","shelf":37,"height":2,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r2-rk2-srv16","location":"DEMO-DC1","rack":"2-2","shelf":39,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk3-srv1","location":"DEMO-DC1","rack":"2-3","shelf":1,"height":4,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk3-srv2","location":"DEMO-DC1","rack":"2-3","shelf":5,"height":2,"power":"Off","indicatorLED":"Off","state":"Discovery"},{"name":"demo-r2-rk3-srv3","location":"DEMO-DC1","rack":"2-3","shelf":7,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r2-rk3-srv4","location":"DEMO-DC1","rack":"2-3","shelf":9,"height":2,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r2-rk3-srv5","location":"DEMO-DC1","rack":"2-3","shelf":11,"height":4,"power":"On","indicatorLED":"Lit","state":"Error"},{"name":"demo-r2-rk3-srv6","location":"DEMO-DC1","rack":"2-3","shelf":15,"height":2,"power":"On","indicatorLED":"Off","state":"Maintenance"},{"name":"demo-r2-rk3-srv7","location":"DEMO-DC1","rack":"2-3","shelf":17,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r2-rk3-srv8","location":"DEMO-DC1","rack":"2-3","shelf":19,"height":4,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r2-rk3-srv9","location":"DEMO-DC1","rack":"2-3","shelf":23,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk3-srv10","location":"DEMO-DC1","rack":"2-3","shelf":25,"height":2,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r2-rk3-srv11","location":"DEMO-DC1","rack":"2-3","shelf":27,"height":2,"power":"On","indicatorLED":"Off","state":"Discovery"},{"name":"demo-r2-rk3-srv12","location":"DEMO-DC1","rack":"2-3","shelf":29,"height":4,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r2-rk3-srv13","location":"DEMO-DC1","rack":"2-3","shelf":33,"height":2,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r2-rk3-srv14","location":"DEMO-DC1","rack":"2-3","shelf":35,"height":2,"power":"On","indicatorLED":"Blinking","state":"Available"},{"name":"demo-r2-rk3-srv15","location":"DEMO-DC1","rack":"2-3","shelf":37,"height":4,"power":"On","indicatorLED":"Off","state":"Maintenance"},{"name":"demo-r3-rk1-srv1","location":"DEMO-DC1","rack":"3-1","shelf":1,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r3-rk1-srv2","location":"DEMO-DC1","rack":"3-1","shelf":3,"height":2,"power":"Off","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r3-rk1-srv3","location":"DEMO-DC1","rack":"3-1","shelf":5,"height":4,"power":"On","indicatorLED":"Blinking","state":"Error"},{"name":"demo-r3-rk1-srv4","location":"DEMO-DC1","rack":"3-1","shelf":9,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r3-rk1-srv5","location":"DEMO-DC1","rack":"3-1","shelf":11,"height":2,"power":"On","indicatorLED":"Off","state":"Maintenance"},{"name":"demo-r3-rk1-srv6","location":"DEMO-DC1","rack":"3-1","shelf":13,"height":2,"power":"On","indicatorLED":"Off","state":"Discovery"},{"name":"demo-r3-rk1-srv7","location":"DEMO-DC1","rack":"3-1","shelf":15,"height":4,"power":"On","indicatorLED":"Lit","state":"Reserved"},{"name":"demo-r3-rk1-srv8","location":"DEMO-DC1","rack":"3-1","shelf":19,"height":1,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk1-srv9","location":"DEMO-DC1","rack":"3-1","shelf":20,"height":2,"power":"On","indicatorLED":"Blinking","state":"Available"},{"name":"demo-r3-rk1-srv10","location":"DEMO-DC1","rack":"3-1","shelf":22,"height":4,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r3-rk1-srv11","location":"DEMO-DC1","rack":"3-1","shelf":26,"height":2,"power":"On","indicatorLED":"Lit","state":"Error"},{"name":"demo-r3-rk1-srv12","location":"DEMO-DC1","rack":"3-1","shelf":28,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk1-srv13","location":"DEMO-DC1","rack":"3-1","shelf":30,"height":4,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r3-rk1-srv14","location":"DEMO-DC1","rack":"3-1","shelf":34,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk1-srv15","location":"DEMO-DC1","rack":"3-1","shelf":36,"height":2,"power":"On","indicatorLED":"Lit","state":"Maintenance"},{"name":"demo-r3-rk1-srv16","location":"DEMO-DC1","rack":"3-1","shelf":38,"height":4,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk2-srv1","location":"DEMO-DC1","rack":"3-2","shelf":1,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk2-srv2","location":"DEMO-DC1","rack":"3-2","shelf":3,"height":2,"power":"On","indicatorLED":"Lit","state":"Maintenance"},{"name":"demo-r3-rk2-srv3","location":"DEMO-DC1","rack":"3-2","shelf":5,"height":4,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r3-rk2-srv4","location":"DEMO-DC1","rack":"3-2","shelf":9,"height":2,"power":"On","indicatorLED":"Blinking","state":"Error"},{"name":"demo-r3-rk2-srv5","location":"DEMO-DC1","rack":"3-2","shelf":11,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk2-srv6","location":"DEMO-DC1","rack":"3-2","shelf":13,"height":2,"power":"On","indicatorLED":"Lit","state":"Discovery"},{"name":"demo-r3-rk2-srv7","location":"DEMO-DC1","rack":"3-2","shelf":15,"height":4,"power":"Off","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk2-srv8","location":"DEMO-DC1","rack":"3-2","shelf":19,"height":2,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r3-rk2-srv9","location":"DEMO-DC1","rack":"3-2","shelf":21,"height":2,"power":"On","indicatorLED":"Blinking","state":"Available"},{"name":"demo-r3-rk2-srv10","location":"DEMO-DC1","rack":"3-2","shelf":23,"height":4,"power":"On","indicatorLED":"Lit","state":"Maintenance"},{"name":"demo-r3-rk2-srv11","location":"DEMO-DC1","rack":"3-2","shelf":27,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk2-srv12","location":"DEMO-DC1","rack":"3-2","shelf":29,"height":2,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r3-rk2-srv13","location":"DEMO-DC1","rack":"3-2","shelf":31,"height":4,"power":"On","indicatorLED":"Lit","state":"Error"},{"name":"demo-r3-rk2-srv14","location":"DEMO-DC1","rack":"3-2","shelf":35,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk2-srv15","location":"DEMO-DC1","rack":"3-2","shelf":37,"height":2,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r3-rk2-srv16","location":"DEMO-DC1","rack":"3-2","shelf":39,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r3-rk3-srv1","location":"DEMO-DC1","rack":"3-3","shelf":1,"height":4,"power":"Off","indicatorLED":"Off","state":"Initial"},{"name":"demo-r3-rk3-srv2","location":"DEMO-DC1","rack":"3-3","shelf":5,"height":2,"power":"On","indicatorLED":"Blinking","state":"Discovery"},{"name":"demo-r3-rk3-srv3","location":"DEMO-DC1","rack":"3-3","shelf":7,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r3-rk3-srv4","location":"DEMO-DC1","rack":"3-3","shelf":9,"height":4,"power":"On","indicatorLED":"Off","state":"Reserved"},{"name":"demo-r3-rk3-srv5","location":"DEMO-DC1","rack":"3-3","shelf":13,"height":2,"power":"On","indicatorLED":"Off","state":"Error"},{"name":"demo-r3-rk3-srv6","location":"DEMO-DC1","rack":"3-3","shelf":15,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r3-rk3-srv7","location":"DEMO-DC1","rack":"3-3","shelf":17,"height":2,"power":"Off","indicatorLED":"Off","state":"Maintenance"},{"name":"demo-r3-rk3-srv8","location":"DEMO-DC1","rack":"3-3","shelf":19,"height":4,"power":"On","indicatorLED":"Blinking","state":"Available"},{"name":"demo-r3-rk3-srv9","location":"DEMO-DC1","rack":"3-3","shelf":23,"height":2,"power":"On","indicatorLED":"Lit","state":"Reserved"},{"name":"demo-r3-rk3-srv10","location":"DEMO-DC1","rack":"3-3","shelf":25,"height":2,"power":"On","indicatorLED":"Off","state":"Available"},{"name":"demo-r3-rk3-srv11","location":"DEMO-DC1","rack":"3-3","shelf":27,"height":4,"power":"On","indicatorLED":"Off","state":"Discovery"},{"name":"demo-r3-rk3-srv12","location":"DEMO-DC1","rack":"3-3","shelf":31,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"},{"name":"demo-r3-rk3-srv13","location":"DEMO-DC1","rack":"3-3","shelf":33,"height":2,"power":"On","indicatorLED":"Off","state":"Error"},{"name":"demo-r3-rk3-srv14","location":"DEMO-DC1","rack":"3-3","shelf":35,"height":4,"power":"On","indicatorLED":"Blinking","state":"Reserved"},{"name":"demo-r3-rk3-srv15","location":"DEMO-DC1","rack":"3-3","shelf":39,"height":2,"power":"On","indicatorLED":"Lit","state":"Available"}]; + + let staticMode = false; + function fetchServers() { fetch('/api/servers') .then(r => { if (!r.ok) throw new Error('fetch failed'); return r.json(); }) @@ -353,8 +358,34 @@ visualizeServers(data); updateStatusHUD(data); } + if (!staticMode) setTimeout(fetchServers, 10000); }) - .catch(err => console.error('Error fetching servers:', err)); + .catch(() => { + // Fallback to embedded demo data (static hosting or no backend) + staticMode = true; + clearScene(); + visualizeServers(DEMO_SERVERS); + updateStatusHUD(DEMO_SERVERS); + enterWalkMode(); + }); + } + + function enterWalkMode() { + walkMode = true; + controls.enabled = false; + camera.position.set(10, 35, 110); + document.getElementById('mode-label').textContent = 'WALK MODE'; + document.getElementById('mode-toggle-btn').textContent = 'Orbit Mode'; + document.getElementById('controls-hint').textContent = 'Click to start | W/A/S/D = move | Mouse = look | Shift = crouch | Scroll = speed | Tab = orbit'; + document.getElementById('crosshair').style.display = 'block'; + const doLock = () => { + renderer.domElement.removeEventListener('click', doLock); + const pos = camera.getWorldPosition(new THREE.Vector3()); + walkControls.getObject().position.set(pos.x, currentEyeHeight, pos.z); + walkControls.lock(); + document.getElementById('controls-hint').textContent = 'W/A/S/D = move | Mouse = look | Shift = crouch | Scroll = speed | Tab = orbit'; + }; + renderer.domElement.addEventListener('click', doLock); } // --------------------------------------------------------------------------- diff --git a/internal/cmd/visualizer/visualizer.go b/internal/cmd/visualizer/visualizer.go index 7be9c4aa7..ebb622da1 100644 --- a/internal/cmd/visualizer/visualizer.go +++ b/internal/cmd/visualizer/visualizer.go @@ -28,6 +28,7 @@ var indexHTML string type Visualizer struct { Client client.Client Address string + DryRun bool } // NewVisualizer creates and returns a new Visualizer instance. @@ -44,7 +45,9 @@ func (v *Visualizer) StartAndServe() error { url := fmt.Sprintf("http://%s", v.Address) http.HandleFunc("/", serveFrontend) - http.HandleFunc("/api/servers", v.handleGetServers()) + if !v.DryRun { + http.HandleFunc("/api/servers", v.handleGetServers()) + } srv := &http.Server{ Addr: v.Address,