From 963540d72e00d8fe537ce8143b85f33d617f5eb1 Mon Sep 17 00:00:00 2001 From: Tzif Date: Mon, 10 Aug 2026 11:43:07 +0300 Subject: [PATCH 1/2] OSAC-3849: add GPU fields to describe instancetype output Display GPU PCI device selector, resource name, and count in the describe instancetype output when a GpuSpec is present. Assisted-by: Claude Code Signed-off-by: Tzif --- .../instancetype/describe_instancetype_cmd.go | 6 +++ .../describe_instancetype_cmd_test.go | 41 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd.go b/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd.go index 8866f01bc1..11af6ac555 100644 --- a/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd.go +++ b/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd.go @@ -109,6 +109,12 @@ func renderInstanceType(w io.Writer, it *publicv1.InstanceType) { state := strings.TrimPrefix(spec.GetState().String(), "INSTANCE_TYPE_STATE_") fmt.Fprintf(writer, "State:\t%s\n", state) + if gpu := spec.GetGpu(); gpu != nil { + fmt.Fprintf(writer, "GPU Count:\t%d\n", gpu.GetCount()) + fmt.Fprintf(writer, "GPU Resource Name:\t%s\n", gpu.GetResourceName()) + fmt.Fprintf(writer, "GPU PCI Device Selector:\t%s\n", gpu.GetPciDeviceSelector()) + } + // Description (only when non-empty): if desc := spec.GetDescription(); desc != "" { fmt.Fprintf(writer, "Description:\t%s\n", desc) diff --git a/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd_test.go b/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd_test.go index 453b5e539d..5ec599a564 100644 --- a/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd_test.go +++ b/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd_test.go @@ -148,4 +148,45 @@ var _ = Describe("Rendering tests", func() { output := formatInstanceType(it) Expect(output).To(MatchRegexp(`Description:\s+High memory`)) }) + + It("should display GPU fields when GpuSpec is present", func() { + it := publicv1.InstanceType_builder{ + Id: "gpu-a100-4-16", + Metadata: publicv1.Metadata_builder{ + Name: "gpu-a100-4-16", + }.Build(), + Spec: publicv1.InstanceTypeSpec_builder{ + Cores: 4, + MemoryGib: 16, + State: publicv1.InstanceTypeState_INSTANCE_TYPE_STATE_ACTIVE, + Gpu: publicv1.GpuSpec_builder{ + PciDeviceSelector: "10DE:20B0", + ResourceName: "nvidia.com/A100", + Count: 2, + }.Build(), + }.Build(), + }.Build() + output := formatInstanceType(it) + Expect(output).To(MatchRegexp(`GPU PCI Device Selector:\s+10DE:20B0`)) + Expect(output).To(MatchRegexp(`GPU Resource Name:\s+nvidia.com/A100`)) + Expect(output).To(MatchRegexp(`GPU Count:\s+2`)) + }) + + It("should omit GPU fields when GpuSpec is absent", func() { + it := publicv1.InstanceType_builder{ + Id: "standard-4-16", + Metadata: publicv1.Metadata_builder{ + Name: "standard-4-16", + }.Build(), + Spec: publicv1.InstanceTypeSpec_builder{ + Cores: 4, + MemoryGib: 16, + State: publicv1.InstanceTypeState_INSTANCE_TYPE_STATE_ACTIVE, + }.Build(), + }.Build() + output := formatInstanceType(it) + Expect(output).NotTo(ContainSubstring("GPU PCI Device Selector:")) + Expect(output).NotTo(ContainSubstring("GPU Resource Name:")) + Expect(output).NotTo(ContainSubstring("GPU Count:")) + }) }) From cea0bcc95dc9a83b68ec32345440f703445b9929 Mon Sep 17 00:00:00 2001 From: Tzif Date: Mon, 10 Aug 2026 14:43:16 +0300 Subject: [PATCH 2/2] =?UTF-8?q?OSAC-3849:=20reorder=20describe=20fields=20?= =?UTF-8?q?=E2=80=94=20GPU=20before=20state?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move GPU fields after memory and before state/description to group hardware specs together. Assisted-by: Claude Code Signed-off-by: Tzif --- .../describe/instancetype/describe_instancetype_cmd.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd.go b/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd.go index 11af6ac555..91a9cbaac3 100644 --- a/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd.go +++ b/fulfillment-service/internal/cmd/cli/describe/instancetype/describe_instancetype_cmd.go @@ -105,16 +105,16 @@ func renderInstanceType(w io.Writer, it *publicv1.InstanceType) { fmt.Fprintf(writer, "Cores:\t%d\n", spec.GetCores()) fmt.Fprintf(writer, "Memory (GiB):\t%d\n", spec.GetMemoryGib()) - // State with prefix stripping (D-02): - state := strings.TrimPrefix(spec.GetState().String(), "INSTANCE_TYPE_STATE_") - fmt.Fprintf(writer, "State:\t%s\n", state) - if gpu := spec.GetGpu(); gpu != nil { fmt.Fprintf(writer, "GPU Count:\t%d\n", gpu.GetCount()) fmt.Fprintf(writer, "GPU Resource Name:\t%s\n", gpu.GetResourceName()) fmt.Fprintf(writer, "GPU PCI Device Selector:\t%s\n", gpu.GetPciDeviceSelector()) } + // State with prefix stripping (D-02): + state := strings.TrimPrefix(spec.GetState().String(), "INSTANCE_TYPE_STATE_") + fmt.Fprintf(writer, "State:\t%s\n", state) + // Description (only when non-empty): if desc := spec.GetDescription(); desc != "" { fmt.Fprintf(writer, "Description:\t%s\n", desc)