feat: Support IP Usage stats in VPC Prefix and Subnet#480
feat: Support IP Usage stats in VPC Prefix and Subnet#480hwadekar-nv wants to merge 6 commits intomainfrom
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughAdds optional IPAM usage statistics to VPC Prefix and Subnet GET endpoints via a new boolean query parameter ChangesVPC Prefix & Subnet IPAM Usage Stats
Generated SDK / Branding and Minor Client Change
Sequence DiagramsequenceDiagram
participant Client
participant Handler as API Handler
participant DAO as DB/DAO
participant IPAM as IPAM Storage
participant Model as API Model
Client->>Handler: GET /.../vpc-prefix?includeUsageStats=true
Handler->>Handler: ParseIncludeUsageStats -> includeUsageStats=true
Handler->>DAO: Fetch VpcPrefix(es) (ensure IPBlock relation when requested)
DAO-->>Handler: VpcPrefix (+ IPBlock)
Handler->>IPAM: GetIpamUsageForVpcPrefix(ctx, ipamDB, vpcPrefix, ipBlock)
IPAM->>IPAM: normalize CIDR, check FullGrant, resolve prefix usage
IPAM-->>Handler: cipam.Usage
Handler->>Model: NewAPIVpcPrefix(dbObj, statusDetails, usage)
Model-->>Handler: APIVpcPrefix (with UsageStats)
Handler-->>Client: 200 OK (includes usageStats)
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes ✨ Finishing Touches🧪 Generate unit tests (beta)
|
🔐 TruffleHog Secret Scan✅ No secrets or credentials found! Your code has been scanned for 700+ types of secrets and credentials. All clear! 🎉 🕐 Last updated: 2026-05-04 19:26:40 UTC | Commit: 57bba30 |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
api/pkg/api/handler/vpcprefix.go (1)
717-729: 💤 Low valueInconsistent error handling between GetAll and Get for missing IPBlock.
In
GetAllVpcPrefixHandler(lines 534-536), a missingIPBlockrelation logs an error and continues, whereas here inGetVpcPrefixHandler, it returns a 500 Internal Server Error. While returning an error for a single-resource GET is defensible, the inconsistency may confuse API consumers. Consider aligning the behavior or documenting the difference.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@api/pkg/api/handler/vpcprefix.go` around lines 717 - 729, GetVpcPrefixHandler currently returns a 500 when vpcPrefix.IPBlock is nil (and on ipam.GetIpamUsageForVpcPrefix errors), which is inconsistent with GetAllVpcPrefixHandler that only logs and continues; make the behavior consistent by changing GetVpcPrefixHandler (in the block guarded by includeUsageStats and the vpcPrefix.IPBlock check) to mirror GetAllVpcPrefixHandler: log the missing IPBlock (using logger.Error().Str("vpcPrefixId", vpcPrefix.ID.String()).Msg(...)), do not return an error—set puVPC to nil or skip usage retrieval—and likewise handle ipam.GetIpamUsageForVpcPrefix errors by logging and continuing instead of returning a cutil.NewAPIErrorResponse; update only GetVpcPrefixHandler and keep the same logging/messages used by GetAllVpcPrefixHandler for consistency.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@api/pkg/api/handler/vpcprefix.go`:
- Around line 717-729: GetVpcPrefixHandler currently returns a 500 when
vpcPrefix.IPBlock is nil (and on ipam.GetIpamUsageForVpcPrefix errors), which is
inconsistent with GetAllVpcPrefixHandler that only logs and continues; make the
behavior consistent by changing GetVpcPrefixHandler (in the block guarded by
includeUsageStats and the vpcPrefix.IPBlock check) to mirror
GetAllVpcPrefixHandler: log the missing IPBlock (using
logger.Error().Str("vpcPrefixId", vpcPrefix.ID.String()).Msg(...)), do not
return an error—set puVPC to nil or skip usage retrieval—and likewise handle
ipam.GetIpamUsageForVpcPrefix errors by logging and continuing instead of
returning a cutil.NewAPIErrorResponse; update only GetVpcPrefixHandler and keep
the same logging/messages used by GetAllVpcPrefixHandler for consistency.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 2378de28-261f-474e-8ce5-8f9048cb1096
📒 Files selected for processing (7)
api/pkg/api/handler/vpcprefix.goapi/pkg/api/handler/vpcprefix_test.goapi/pkg/api/model/vpcprefix.goapi/pkg/api/model/vpcprefix_test.godb/pkg/db/ipam/ipam.godb/pkg/db/ipam/ipam_test.goopenapi/spec.yaml
Test Results6 906 tests - 2 145 6 902 ✅ - 2 149 5m 2s ⏱️ - 2m 19s For more details on these errors, see this check. Results for commit 2619daf. ± Comparison against base commit ba78506. This pull request removes 2155 and adds 10 tests. Note that renamed tests count towards both.♻️ This comment has been updated with latest results. |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
sdk/standard/client.go (1)
594-607:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winDefer file closure until after
io.Copycompletes.The
addFilefunction closes the file descriptor at line 598–600 before invokingio.Copy(part, file)at line 607. This produces a use-after-close error on the file handle, causing multipart uploads to fail. This is a generated file; the fix must be applied at the OpenAPI Generator source and regenerated viamake generate-sdk.The suggested fix uses a deferred cleanup closure to ensure the file is kept open through the copy operation and properly closed afterward, with error chaining to preserve any close-time errors:
Suggested fix
-func addFile(w *multipart.Writer, fieldName, path string) error { +func addFile(w *multipart.Writer, fieldName, path string) (err error) { file, err := os.Open(filepath.Clean(path)) if err != nil { return err } - err = file.Close() - if err != nil { - return err - } + defer func() { + if cerr := file.Close(); err == nil && cerr != nil { + err = cerr + } + }() part, err := w.CreateFormFile(fieldName, filepath.Base(path)) if err != nil { return err } _, err = io.Copy(part, file) return err }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@sdk/standard/client.go` around lines 594 - 607, In addFile, the file is closed before io.Copy reads from it, causing a use-after-close; change the code to open the file (os.Open(filepath.Clean(path))) and immediately defer a closure that closes the file after io.Copy finishes, capturing any close error and chaining it with the io.Copy error before returning; update the OpenAPI Generator template that produces sdk/standard/client.go and regenerate the SDK via make generate-sdk so the fix is applied to generated output.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@sdk/standard/client.go`:
- Around line 594-607: In addFile, the file is closed before io.Copy reads from
it, causing a use-after-close; change the code to open the file
(os.Open(filepath.Clean(path))) and immediately defer a closure that closes the
file after io.Copy finishes, capturing any close error and chaining it with the
io.Copy error before returning; update the OpenAPI Generator template that
produces sdk/standard/client.go and regenerate the SDK via make generate-sdk so
the fix is applied to generated output.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: e01a6e93-93bb-4a81-9d16-dfb862cdbfbc
📒 Files selected for processing (229)
sdk/standard/api_allocation.gosdk/standard/api_audit.gosdk/standard/api_dpu_extension_service.gosdk/standard/api_expected_machine.gosdk/standard/api_expected_power_shelf.gosdk/standard/api_expected_switch.gosdk/standard/api_infini_band_partition.gosdk/standard/api_infrastructure_provider.gosdk/standard/api_instance.gosdk/standard/api_instance_type.gosdk/standard/api_ip_block.gosdk/standard/api_machine.gosdk/standard/api_metadata.gosdk/standard/api_network_security_group.gosdk/standard/api_nv_link_logical_partition.gosdk/standard/api_operating_system.gosdk/standard/api_rack.gosdk/standard/api_service_account.gosdk/standard/api_site.gosdk/standard/api_sku.gosdk/standard/api_ssh_key.gosdk/standard/api_ssh_key_group.gosdk/standard/api_subnet.gosdk/standard/api_tenant.gosdk/standard/api_tenant_account.gosdk/standard/api_tray.gosdk/standard/api_user.gosdk/standard/api_vpc.gosdk/standard/api_vpc_peering.gosdk/standard/api_vpc_prefix.gosdk/standard/client.gosdk/standard/configuration.gosdk/standard/model_allocation.gosdk/standard/model_allocation_constraint.gosdk/standard/model_allocation_constraint_create_request.gosdk/standard/model_allocation_constraint_update_request.gosdk/standard/model_allocation_create_request.gosdk/standard/model_allocation_stats.gosdk/standard/model_allocation_status.gosdk/standard/model_allocation_update_request.gosdk/standard/model_audit_entry.gosdk/standard/model_batch_bring_up_rack_request.gosdk/standard/model_batch_instance_create_request.gosdk/standard/model_batch_rack_firmware_update_request.gosdk/standard/model_batch_tray_firmware_update_request.gosdk/standard/model_batch_update_rack_power_state_request.gosdk/standard/model_batch_update_tray_power_state_request.gosdk/standard/model_bmc_info.gosdk/standard/model_bring_up_rack_request.gosdk/standard/model_bring_up_rack_response.gosdk/standard/model_carbide_api_error.gosdk/standard/model_component_diff.gosdk/standard/model_deprecation.gosdk/standard/model_dpu_extension_service.gosdk/standard/model_dpu_extension_service_create_request.gosdk/standard/model_dpu_extension_service_credentials.gosdk/standard/model_dpu_extension_service_deployment.gosdk/standard/model_dpu_extension_service_deployment_request.gosdk/standard/model_dpu_extension_service_deployment_status.gosdk/standard/model_dpu_extension_service_observability.gosdk/standard/model_dpu_extension_service_observability_config.gosdk/standard/model_dpu_extension_service_observability_logging.gosdk/standard/model_dpu_extension_service_observability_prometheus.gosdk/standard/model_dpu_extension_service_status.gosdk/standard/model_dpu_extension_service_summary.gosdk/standard/model_dpu_extension_service_update_request.gosdk/standard/model_dpu_extension_service_version_info.gosdk/standard/model_expected_machine.gosdk/standard/model_expected_machine_create_request.gosdk/standard/model_expected_machine_update_request.gosdk/standard/model_expected_power_shelf.gosdk/standard/model_expected_power_shelf_create_request.gosdk/standard/model_expected_power_shelf_update_request.gosdk/standard/model_expected_switch.gosdk/standard/model_expected_switch_create_request.gosdk/standard/model_expected_switch_update_request.gosdk/standard/model_field_diff.gosdk/standard/model_firmware_update_request.gosdk/standard/model_firmware_update_response.gosdk/standard/model_infini_band_interface.gosdk/standard/model_infini_band_interface_create_request.gosdk/standard/model_infini_band_interface_status.gosdk/standard/model_infini_band_partition.gosdk/standard/model_infini_band_partition_create_request.gosdk/standard/model_infini_band_partition_status.gosdk/standard/model_infini_band_partition_update_request.gosdk/standard/model_infrastructure_provider.gosdk/standard/model_infrastructure_provider_stats.gosdk/standard/model_instance.gosdk/standard/model_instance_count_by_status.gosdk/standard/model_instance_create_request.gosdk/standard/model_instance_delete_request.gosdk/standard/model_instance_status.gosdk/standard/model_instance_type.gosdk/standard/model_instance_type_allocation_stats.gosdk/standard/model_instance_type_capability_create_request.gosdk/standard/model_instance_type_create_request.gosdk/standard/model_instance_type_stats.gosdk/standard/model_instance_type_status.gosdk/standard/model_instance_type_summary.gosdk/standard/model_instance_type_update_request.gosdk/standard/model_instance_update_request.gosdk/standard/model_interface.gosdk/standard/model_interface_create_request.gosdk/standard/model_interface_status.gosdk/standard/model_ip_block.gosdk/standard/model_ip_block_count_by_status.gosdk/standard/model_ip_block_create_request.gosdk/standard/model_ip_block_status.gosdk/standard/model_ip_block_summary.gosdk/standard/model_ip_block_update_request.gosdk/standard/model_ip_block_usage_stats.gosdk/standard/model_machine.gosdk/standard/model_machine_bmc_info.gosdk/standard/model_machine_capability.gosdk/standard/model_machine_count_by_status.gosdk/standard/model_machine_dmi_data.gosdk/standard/model_machine_gpu_info.gosdk/standard/model_machine_gpu_stats.gosdk/standard/model_machine_health.gosdk/standard/model_machine_health_issue.gosdk/standard/model_machine_health_probe_alert.gosdk/standard/model_machine_health_probe_success.gosdk/standard/model_machine_infini_band_interface.gosdk/standard/model_machine_instance_type.gosdk/standard/model_machine_instance_type_create_request.gosdk/standard/model_machine_instance_type_stats.gosdk/standard/model_machine_instance_type_summary.gosdk/standard/model_machine_interface.gosdk/standard/model_machine_metadata.gosdk/standard/model_machine_network_interface.gosdk/standard/model_machine_status.gosdk/standard/model_machine_status_breakdown.gosdk/standard/model_machine_summary.gosdk/standard/model_machine_update_request.gosdk/standard/model_metadata.gosdk/standard/model_network_security_group.gosdk/standard/model_network_security_group_create_request.gosdk/standard/model_network_security_group_propagation_details.gosdk/standard/model_network_security_group_propagation_status.gosdk/standard/model_network_security_group_rule.gosdk/standard/model_network_security_group_status.gosdk/standard/model_network_security_group_update_request.gosdk/standard/model_nv_link_interface.gosdk/standard/model_nv_link_interface_create_request.gosdk/standard/model_nv_link_interface_status.gosdk/standard/model_nv_link_logical_partition.gosdk/standard/model_nv_link_logical_partition_create_request.gosdk/standard/model_nv_link_logical_partition_status.gosdk/standard/model_nv_link_logical_partition_update_request.gosdk/standard/model_operating_system.gosdk/standard/model_operating_system_create_request.gosdk/standard/model_operating_system_site_association.gosdk/standard/model_operating_system_status.gosdk/standard/model_operating_system_update_request.gosdk/standard/model_rack.gosdk/standard/model_rack_component.gosdk/standard/model_rack_filter.gosdk/standard/model_rack_location.gosdk/standard/model_rack_task.gosdk/standard/model_rack_validation_result.gosdk/standard/model_service_account.gosdk/standard/model_site.gosdk/standard/model_site_capabilities.gosdk/standard/model_site_contact.gosdk/standard/model_site_create_request.gosdk/standard/model_site_location.gosdk/standard/model_site_machine_stats.gosdk/standard/model_site_machine_stats_by_allocation.gosdk/standard/model_site_machine_stats_by_health.gosdk/standard/model_site_machine_stats_by_status.gosdk/standard/model_site_machine_stats_by_status_and_health.gosdk/standard/model_site_status.gosdk/standard/model_site_summary.gosdk/standard/model_site_update_request.gosdk/standard/model_sku.gosdk/standard/model_sku_chassis.gosdk/standard/model_sku_components.gosdk/standard/model_sku_cpu.gosdk/standard/model_sku_ethernet_device.gosdk/standard/model_sku_gpu.gosdk/standard/model_sku_infiniband_device.gosdk/standard/model_sku_memory.gosdk/standard/model_sku_storage.gosdk/standard/model_sku_tpm.gosdk/standard/model_ssh_key.gosdk/standard/model_ssh_key_create_request.gosdk/standard/model_ssh_key_group.gosdk/standard/model_ssh_key_group_create_request.gosdk/standard/model_ssh_key_group_site_association.gosdk/standard/model_ssh_key_group_site_association_status.gosdk/standard/model_ssh_key_group_status.gosdk/standard/model_ssh_key_group_update_request.gosdk/standard/model_ssh_key_update_request.gosdk/standard/model_status_detail.gosdk/standard/model_subnet.gosdk/standard/model_subnet_count_by_status.gosdk/standard/model_subnet_create_request.gosdk/standard/model_subnet_status.gosdk/standard/model_subnet_update_request.gosdk/standard/model_tenant.gosdk/standard/model_tenant_account.gosdk/standard/model_tenant_account_count_by_status.gosdk/standard/model_tenant_account_create_request.gosdk/standard/model_tenant_account_status.gosdk/standard/model_tenant_capabilities.gosdk/standard/model_tenant_instance_type_stats.gosdk/standard/model_tenant_stats.gosdk/standard/model_tray.gosdk/standard/model_tray_filter.gosdk/standard/model_tray_position.gosdk/standard/model_update_power_state_request.gosdk/standard/model_update_power_state_response.gosdk/standard/model_user.gosdk/standard/model_vpc.gosdk/standard/model_vpc_count_by_status.gosdk/standard/model_vpc_create_request.gosdk/standard/model_vpc_peering.gosdk/standard/model_vpc_peering_create_request.gosdk/standard/model_vpc_peering_status.gosdk/standard/model_vpc_prefix.gosdk/standard/model_vpc_prefix_create_request.gosdk/standard/model_vpc_prefix_status.gosdk/standard/model_vpc_prefix_update_request.gosdk/standard/model_vpc_status.gosdk/standard/model_vpc_update_request.gosdk/standard/model_vpc_virtualization_update_request.gosdk/standard/response.gosdk/standard/utils.go
✅ Files skipped from review due to trivial changes (227)
- sdk/standard/model_network_security_group_rule.go
- sdk/standard/model_allocation_create_request.go
- sdk/standard/model_dpu_extension_service_observability_prometheus.go
- sdk/standard/model_dpu_extension_service_deployment_status.go
- sdk/standard/model_ip_block_status.go
- sdk/standard/model_infini_band_interface_status.go
- sdk/standard/model_firmware_update_request.go
- sdk/standard/model_dpu_extension_service_status.go
- sdk/standard/api_metadata.go
- sdk/standard/model_ip_block_summary.go
- sdk/standard/model_sku_ethernet_device.go
- sdk/standard/model_sku_chassis.go
- sdk/standard/model_instance_type_status.go
- sdk/standard/model_site_status.go
- sdk/standard/model_dpu_extension_service_version_info.go
- sdk/standard/model_instance_type_create_request.go
- sdk/standard/model_site_summary.go
- sdk/standard/model_tenant_account_status.go
- sdk/standard/model_batch_bring_up_rack_request.go
- sdk/standard/model_instance_status.go
- sdk/standard/model_ssh_key_group_site_association_status.go
- sdk/standard/model_rack_filter.go
- sdk/standard/model_instance_type_update_request.go
- sdk/standard/model_machine_health_probe_alert.go
- sdk/standard/model_ip_block_update_request.go
- sdk/standard/model_deprecation.go
- sdk/standard/model_vpc_status.go
- sdk/standard/model_dpu_extension_service.go
- sdk/standard/model_operating_system_status.go
- sdk/standard/model_nv_link_logical_partition_update_request.go
- sdk/standard/model_allocation_stats.go
- sdk/standard/model_subnet_update_request.go
- sdk/standard/model_subnet_count_by_status.go
- sdk/standard/model_site_location.go
- sdk/standard/model_dpu_extension_service_observability_logging.go
- sdk/standard/model_machine_network_interface.go
- sdk/standard/model_bring_up_rack_request.go
- sdk/standard/model_site_machine_stats_by_health.go
- sdk/standard/model_instance_type_allocation_stats.go
- sdk/standard/api_operating_system.go
- sdk/standard/model_sku_gpu.go
- sdk/standard/model_dpu_extension_service_observability.go
- sdk/standard/model_operating_system_site_association.go
- sdk/standard/model_update_power_state_response.go
- sdk/standard/model_machine_metadata.go
- sdk/standard/model_vpc_peering_status.go
- sdk/standard/model_machine_interface.go
- sdk/standard/model_vpc_prefix_update_request.go
- sdk/standard/model_rack_validation_result.go
- sdk/standard/model_tenant.go
- sdk/standard/api_subnet.go
- sdk/standard/api_expected_power_shelf.go
- sdk/standard/model_rack.go
- sdk/standard/model_instance_type_stats.go
- sdk/standard/model_ssh_key.go
- sdk/standard/api_ssh_key_group.go
- sdk/standard/model_allocation.go
- sdk/standard/model_machine.go
- sdk/standard/model_instance.go
- sdk/standard/api_tenant.go
- sdk/standard/model_instance_delete_request.go
- sdk/standard/model_instance_type_capability_create_request.go
- sdk/standard/model_machine_status.go
- sdk/standard/model_allocation_constraint_create_request.go
- sdk/standard/model_field_diff.go
- sdk/standard/model_audit_entry.go
- sdk/standard/model_site_machine_stats_by_status_and_health.go
- sdk/standard/api_infrastructure_provider.go
- sdk/standard/configuration.go
- sdk/standard/model_tray_position.go
- sdk/standard/api_dpu_extension_service.go
- sdk/standard/model_ip_block.go
- sdk/standard/model_sku_infiniband_device.go
- sdk/standard/model_machine_bmc_info.go
- sdk/standard/model_ssh_key_group_site_association.go
- sdk/standard/model_machine_health_probe_success.go
- sdk/standard/model_instance_count_by_status.go
- sdk/standard/model_tenant_account_create_request.go
- sdk/standard/model_infrastructure_provider.go
- sdk/standard/model_subnet_status.go
- sdk/standard/model_dpu_extension_service_deployment.go
- sdk/standard/model_allocation_update_request.go
- sdk/standard/model_dpu_extension_service_observability_config.go
- sdk/standard/model_rack_location.go
- sdk/standard/model_site_machine_stats_by_allocation.go
- sdk/standard/api_expected_machine.go
- sdk/standard/model_bring_up_rack_response.go
- sdk/standard/model_subnet_create_request.go
- sdk/standard/model_tray_filter.go
- sdk/standard/model_machine_instance_type.go
- sdk/standard/model_machine_summary.go
- sdk/standard/model_sku_memory.go
- sdk/standard/model_ip_block_usage_stats.go
- sdk/standard/model_expected_machine.go
- sdk/standard/model_instance_create_request.go
- sdk/standard/model_allocation_constraint.go
- sdk/standard/model_nv_link_interface_create_request.go
- sdk/standard/model_machine_health.go
- sdk/standard/model_ip_block_count_by_status.go
- sdk/standard/api_ip_block.go
- sdk/standard/model_subnet.go
- sdk/standard/model_nv_link_interface_status.go
- sdk/standard/model_batch_update_rack_power_state_request.go
- sdk/standard/model_nv_link_logical_partition.go
- sdk/standard/model_network_security_group_status.go
- sdk/standard/model_rack_task.go
- sdk/standard/model_site_capabilities.go
- sdk/standard/model_site_machine_stats_by_status.go
- sdk/standard/model_ssh_key_group_update_request.go
- sdk/standard/model_sku_components.go
- sdk/standard/model_tenant_capabilities.go
- sdk/standard/model_instance_type.go
- sdk/standard/api_site.go
- sdk/standard/api_tenant_account.go
- sdk/standard/model_dpu_extension_service_create_request.go
- sdk/standard/model_firmware_update_response.go
- sdk/standard/api_allocation.go
- sdk/standard/model_tenant_instance_type_stats.go
- sdk/standard/api_ssh_key.go
- sdk/standard/model_network_security_group_create_request.go
- sdk/standard/model_dpu_extension_service_deployment_request.go
- sdk/standard/model_bmc_info.go
- sdk/standard/model_dpu_extension_service_summary.go
- sdk/standard/api_service_account.go
- sdk/standard/model_ssh_key_group_create_request.go
- sdk/standard/model_vpc_peering_create_request.go
- sdk/standard/model_interface.go
- sdk/standard/model_carbide_api_error.go
- sdk/standard/model_expected_power_shelf.go
- sdk/standard/model_sku.go
- sdk/standard/response.go
- sdk/standard/api_machine.go
- sdk/standard/model_machine_gpu_stats.go
- sdk/standard/api_expected_switch.go
- sdk/standard/api_user.go
- sdk/standard/model_vpc_prefix_create_request.go
- sdk/standard/model_operating_system.go
- sdk/standard/model_update_power_state_request.go
- sdk/standard/model_infini_band_partition_status.go
- sdk/standard/model_status_detail.go
- sdk/standard/api_infini_band_partition.go
- sdk/standard/model_tenant_account_count_by_status.go
- sdk/standard/api_sku.go
- sdk/standard/model_batch_instance_create_request.go
- sdk/standard/model_network_security_group_propagation_status.go
- sdk/standard/model_ssh_key_group_status.go
- sdk/standard/model_machine_instance_type_create_request.go
- sdk/standard/model_machine_instance_type_stats.go
- sdk/standard/model_batch_update_tray_power_state_request.go
- sdk/standard/model_interface_status.go
- sdk/standard/model_network_security_group_update_request.go
- sdk/standard/model_site_update_request.go
- sdk/standard/model_sku_cpu.go
- sdk/standard/model_infrastructure_provider_stats.go
- sdk/standard/model_batch_tray_firmware_update_request.go
- sdk/standard/model_ssh_key_update_request.go
- sdk/standard/model_site_contact.go
- sdk/standard/model_machine_gpu_info.go
- sdk/standard/model_machine_health_issue.go
- sdk/standard/model_nv_link_logical_partition_status.go
- sdk/standard/utils.go
- sdk/standard/model_sku_tpm.go
- sdk/standard/api_nv_link_logical_partition.go
- sdk/standard/api_network_security_group.go
- sdk/standard/model_tray.go
- sdk/standard/api_vpc.go
- sdk/standard/model_infini_band_partition_update_request.go
- sdk/standard/model_rack_component.go
- sdk/standard/model_user.go
- sdk/standard/model_ssh_key_create_request.go
- sdk/standard/model_batch_rack_firmware_update_request.go
- sdk/standard/api_instance.go
- sdk/standard/model_instance_type_summary.go
- sdk/standard/model_metadata.go
- sdk/standard/model_machine_infini_band_interface.go
- sdk/standard/model_expected_power_shelf_update_request.go
- sdk/standard/model_machine_capability.go
- sdk/standard/model_tenant_stats.go
- sdk/standard/api_vpc_peering.go
- sdk/standard/model_operating_system_create_request.go
- sdk/standard/model_vpc_virtualization_update_request.go
- sdk/standard/model_site.go
- sdk/standard/api_instance_type.go
- sdk/standard/model_tenant_account.go
- sdk/standard/model_sku_storage.go
- sdk/standard/model_expected_power_shelf_create_request.go
- sdk/standard/model_site_create_request.go
- sdk/standard/model_machine_dmi_data.go
- sdk/standard/model_component_diff.go
- sdk/standard/model_vpc_count_by_status.go
- sdk/standard/api_audit.go
- sdk/standard/model_infini_band_interface_create_request.go
- sdk/standard/model_network_security_group_propagation_details.go
- sdk/standard/model_allocation_constraint_update_request.go
- sdk/standard/model_ssh_key_group.go
- sdk/standard/model_ip_block_create_request.go
- sdk/standard/model_machine_instance_type_summary.go
- sdk/standard/model_vpc_peering.go
- sdk/standard/model_operating_system_update_request.go
- sdk/standard/model_vpc_prefix_status.go
- sdk/standard/model_instance_update_request.go
- sdk/standard/model_service_account.go
- sdk/standard/model_expected_switch.go
- sdk/standard/model_dpu_extension_service_credentials.go
- sdk/standard/model_infini_band_partition.go
- sdk/standard/model_vpc_prefix.go
- sdk/standard/model_infini_band_interface.go
- sdk/standard/api_tray.go
- sdk/standard/model_expected_machine_update_request.go
- sdk/standard/model_allocation_status.go
- sdk/standard/model_expected_switch_update_request.go
- sdk/standard/model_network_security_group.go
- sdk/standard/model_expected_switch_create_request.go
- sdk/standard/api_rack.go
- sdk/standard/model_machine_count_by_status.go
- sdk/standard/model_nv_link_interface.go
- sdk/standard/model_machine_update_request.go
- sdk/standard/model_infini_band_partition_create_request.go
- sdk/standard/model_site_machine_stats.go
- sdk/standard/model_machine_status_breakdown.go
- sdk/standard/model_nv_link_logical_partition_create_request.go
- sdk/standard/model_vpc_update_request.go
- sdk/standard/model_vpc.go
- sdk/standard/model_expected_machine_create_request.go
- sdk/standard/model_interface_create_request.go
- sdk/standard/model_dpu_extension_service_update_request.go
- sdk/standard/model_vpc_create_request.go
🔍 Container Scan Summary
Per-CVE detail lives in the per-service |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
openapi/spec.yaml (1)
2914-2920: ⚡ Quick winConsolidate
includeUsageStatsinto a reusable OpenAPI parameter component.The same parameter is repeated in four operations. Defining it once under
components/parametersand referencing it avoids drift and keeps descriptions synchronized.Proposed refactor
+# components: +# parameters: +# IncludeUsageStats: +# schema: +# type: boolean +# in: query +# name: includeUsageStats +# description: >- +# When true, includes IPAM usage statistics (`usageStats`). - - schema: - type: boolean - in: query - name: includeUsageStats - description: >- - ... + - $ref: '#/components/parameters/IncludeUsageStats'Also applies to: 3019-3025, 3161-3167, 3330-3336
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@openapi/spec.yaml` around lines 2914 - 2920, Extract the repeated query parameter "includeUsageStats" into a single reusable OpenAPI parameter component under components.parameters (e.g., components.parameters.includeUsageStats) with the current schema/type, name, in, and description, then replace each inline parameter occurrence (the ones using name: includeUsageStats and type: boolean in query across the operations) with a $ref to that new component; ensure all four occurrences (and any others at lines noted) now reference components.parameters.includeUsageStats so the description stays synchronized.api/pkg/api/handler/subnet_test.go (1)
1247-1265: ⚡ Quick winExtend coverage to
GetAllincludeUsageStats paths as well.Great addition for
Get. Please mirror this forTestSubnetHandler_GetAll(invalid boolean ->400,includeUsageStats=true->200with non-nilusageStats) since the list handler now has equivalent logic.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@api/pkg/api/handler/subnet_test.go` around lines 1247 - 1265, Add equivalent test cases to TestSubnetHandler_GetAll to cover the includeUsageStats query paths: insert a case where queryIncludeUsageStats is set to cdb.GetStrPtr("not-a-bool") expecting expectedErr true and expectedStatus http.StatusBadRequest, and a case where queryIncludeUsageStats is cdb.GetStrPtr("true") expecting expectedErr false, expectedStatus http.StatusOK and expectUsageStatsNonNil true; ensure these cases follow the same test structure and assertions used in TestSubnetHandler_Get (look for the queryIncludeUsageStats and expectUsageStatsNonNil fields) so the list handler's includeUsageStats parsing and returned usageStats are validated.api/pkg/api/model/subnet_test.go (1)
257-257: ⚡ Quick winAdd a positive-path model test for
UsageStatsmapping.The signature update is covered, but the new non-nil
dbpubehavior is not directly asserted. Please add a case that passes a populated usage and verifies all mapped fields onAPISubnet.UsageStats.🧪 Suggested test shape
+ t.Run("maps usage stats when provided", func(t *testing.T) { + usage := &ipam.Usage{ + AvailableIPs: 10, AcquiredIPs: 2, + AvailablePrefixes: 3, AcquiredPrefixes: 1, + AvailableSmallestPrefixes: 8, + } + got := NewAPISubnet(dbObj, dbsds, usage) + require.NotNil(t, got.UsageStats) + assert.Equal(t, usage.AvailableIPs, got.UsageStats.AvailableIPs) + assert.Equal(t, usage.AcquiredIPs, got.UsageStats.AcquiredIPs) + assert.Equal(t, usage.AvailablePrefixes, got.UsageStats.AvailablePrefixes) + assert.Equal(t, usage.AcquiredPrefixes, got.UsageStats.AcquiredPrefixes) + assert.Equal(t, usage.AvailableSmallestPrefixes, got.UsageStats.AvailableSmallestPrefixes) + })🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@api/pkg/api/model/subnet_test.go` at line 257, Add a positive-path unit test that calls NewAPISubnet with a non-nil populated usage object (the db-side usage struct passed as the third argument, often named dbpu) and assert that APISubnet.UsageStats is non-nil and all fields are mapped correctly; specifically create a test case in subnet_test.go that constructs a dbObj and sdObj plus a populated usage (with values for bytes_in, bytes_out, packets_in, packets_out, last_updated, etc.), call NewAPISubnet(tc.dbObj, tc.sdObj, dbpu) and then verify each corresponding field on the resulting APISubnet.UsageStats matches the input usage values to cover the new non-nil dbpu behavior for NewAPISubnet and ensure APISubnet.UsageStats mapping is fully asserted.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@api/pkg/api/handler/subnet.go`:
- Around line 597-613: When includeUsageStats is true, don't silently skip
subnets on errors; instead fail-fast and return the error so the client doesn't
get misleading partial stats. In the loop that builds puSubnetMap (referencing
puSubnetMap, includeUsageStats, ipam.NewIpamStorage, ipam.GetIpamUsageForSubnet
and logger), replace the current logger.Error() + continue behavior: if
sn.IPv4Block is nil or ipam.GetIpamUsageForSubnet returns an error (serr),
return/propagate a proper handler error response (with serr included) rather
than continuing, matching the failure behavior used in the Get handler.
In `@db/pkg/db/ipam/ipam.go`:
- Around line 94-104: cidrPrefixesEqual currently compares parsed prefixes
directly which can differ when host bits are present (e.g., "192.168.0.1/24" vs
"192.168.0.0/24"); change cidrPrefixesEqual to normalize both parsed prefixes to
their network (mask out host bits) before comparing: parse a and b with
netip.ParsePrefix, compute the canonical network address for each prefix by
applying the prefix length mask to the address (i.e., produce a Prefix whose
address is the masked/network address and the same bit length), then compare
those normalized prefixes (pa_normalized == pb_normalized) and return that
result; keep using the existing function name cidrPrefixesEqual and variables
pa/pb to locate the code.
---
Nitpick comments:
In `@api/pkg/api/handler/subnet_test.go`:
- Around line 1247-1265: Add equivalent test cases to TestSubnetHandler_GetAll
to cover the includeUsageStats query paths: insert a case where
queryIncludeUsageStats is set to cdb.GetStrPtr("not-a-bool") expecting
expectedErr true and expectedStatus http.StatusBadRequest, and a case where
queryIncludeUsageStats is cdb.GetStrPtr("true") expecting expectedErr false,
expectedStatus http.StatusOK and expectUsageStatsNonNil true; ensure these cases
follow the same test structure and assertions used in TestSubnetHandler_Get
(look for the queryIncludeUsageStats and expectUsageStatsNonNil fields) so the
list handler's includeUsageStats parsing and returned usageStats are validated.
In `@api/pkg/api/model/subnet_test.go`:
- Line 257: Add a positive-path unit test that calls NewAPISubnet with a non-nil
populated usage object (the db-side usage struct passed as the third argument,
often named dbpu) and assert that APISubnet.UsageStats is non-nil and all fields
are mapped correctly; specifically create a test case in subnet_test.go that
constructs a dbObj and sdObj plus a populated usage (with values for bytes_in,
bytes_out, packets_in, packets_out, last_updated, etc.), call
NewAPISubnet(tc.dbObj, tc.sdObj, dbpu) and then verify each corresponding field
on the resulting APISubnet.UsageStats matches the input usage values to cover
the new non-nil dbpu behavior for NewAPISubnet and ensure APISubnet.UsageStats
mapping is fully asserted.
In `@openapi/spec.yaml`:
- Around line 2914-2920: Extract the repeated query parameter
"includeUsageStats" into a single reusable OpenAPI parameter component under
components.parameters (e.g., components.parameters.includeUsageStats) with the
current schema/type, name, in, and description, then replace each inline
parameter occurrence (the ones using name: includeUsageStats and type: boolean
in query across the operations) with a $ref to that new component; ensure all
four occurrences (and any others at lines noted) now reference
components.parameters.includeUsageStats so the description stays synchronized.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 40202580-bebf-4639-a67f-f92236edcfaf
📒 Files selected for processing (7)
api/pkg/api/handler/subnet.goapi/pkg/api/handler/subnet_test.goapi/pkg/api/model/subnet.goapi/pkg/api/model/subnet_test.godb/pkg/db/ipam/ipam.godb/pkg/db/ipam/ipam_test.goopenapi/spec.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
- db/pkg/db/ipam/ipam_test.go
b3530ac to
4f52092
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
api/pkg/api/handler/subnet.go (1)
586-599:⚠️ Potential issue | 🟠 Major | ⚡ Quick winFail request instead of returning silent partial
usageStatsin GetAll.When
includeUsageStats=true, continuing after usage-resolution failures can return200 OKwith incomplete stats. This is inconsistent with the Get handler’s fail-fast behavior and can mislead clients.Proposed fix
puSubnetMap := map[uuid.UUID]*cip.Usage{} if includeUsageStats { ipamStorage := ipam.NewIpamStorage(gash.dbSession.DB, nil) for i := range subnets { sn := &subnets[i] if sn.IPv4Block == nil { logger.Error().Str("subnetId", sn.ID.String()).Msg("Subnet missing IPv4 Block relation for usage stats") - continue + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Usage Stats for Subnet", nil) } prefixUsage, serr := ipam.GetIpamUsageForSubnet(ctx, ipamStorage, sn, sn.IPv4Block) if serr != nil { logger.Error().Err(serr).Str("subnetId", sn.ID.String()).Msg("error retrieving ipam usage stats for Subnet") - continue + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Usage Stats for Subnet", nil) } puSubnetMap[sn.ID] = prefixUsage } }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@api/pkg/api/handler/subnet.go` around lines 586 - 599, The current loop in subnet.go that builds puSubnetMap when includeUsageStats is true (using ipam.NewIpamStorage and ipam.GetIpamUsageForSubnet) silently logs errors and continues, producing partial usageStats; change this to fail-fast: when ipam.GetIpamUsageForSubnet returns an error (serr) or sn.IPv4Block is nil, stop processing and return an HTTP error response (propagate/translate serr into the handler's error return path) instead of continuing, ensuring the GetAll handler returns a non-200 error consistently like the Get handler does.
🧹 Nitpick comments (3)
openapi/spec.yaml (2)
13351-13356: ⚡ Quick winDocument omission semantics for
usageStatswhen not requested.The description states presence when
includeUsageStats=true; please also state that the field is omitted when false/absent to avoid null-vs-missing ambiguity in generated SDK clients.As per coding guidelines: "Review the OpenAPI specification, check for consistency and correctness, check for misspellings and grammatical errors."
Also applies to: 13527-13532
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@openapi/spec.yaml` around lines 13351 - 13356, Update the OpenAPI description for the usageStats property (schema reference IpBlockUsageStats) to explicitly state that the field is only present when the query parameter includeUsageStats=true and is omitted (not returned as null) when includeUsageStats is false or absent; apply the same clarification to the other occurrence of usageStats in the spec so generated SDKs won’t confuse missing vs null values.
2914-2920: ⚡ Quick winCentralize
includeUsageStatsas a reusable OpenAPI parameter.The same parameter block is duplicated in four operations. Moving it to
components/parametersand referencing it via$refwill reduce drift risk and keep docs consistent as behavior evolves.As per coding guidelines: "Review the OpenAPI specification, check for consistency and correctness, check for misspellings and grammatical errors."
Also applies to: 3019-3025, 3161-3167, 3330-3336
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@openapi/spec.yaml` around lines 2914 - 2920, Create a single reusable OpenAPI parameter named includeUsageStats under components.parameters with the same schema/in, name and description as the duplicated blocks, then replace each duplicated inline parameter in the four operations (the blocks currently declaring includeUsageStats) with a $ref to that component (e.g., $ref: '#/components/parameters/includeUsageStats'); ensure the component uses type: boolean and retains the exact description text and update all occurrences that match the duplicates noted so they all reference the single component.db/pkg/db/ipam/ipam_test.go (1)
900-903: ⚡ Quick winAdd explicit nil-parent (
ipBlock) error-path coverage in both new tests.Both helper functions guard
ipBlock == nil, but these new tests do not assertErrNilIPBlock. Adding that case will close the boundary-condition coverage for the feature path.Suggested patch
@@ uNil, err := GetIpamUsageForVpcPrefix(ctx, ipamDB, nil, parent) assert.Nil(t, uNil) assert.ErrorIs(t, err, ErrNilVpcPrefix) + + uNilParent, err := GetIpamUsageForVpcPrefix(ctx, ipamDB, vpFullCidr, nil) + assert.Nil(t, uNilParent) + assert.ErrorIs(t, err, ErrNilIPBlock) @@ uNil, err := GetIpamUsageForSubnet(ctx, ipamDB, nil, parent) assert.Nil(t, uNil) assert.ErrorIs(t, err, ErrNilSubnet) + + uNilParent, err := GetIpamUsageForSubnet(ctx, ipamDB, subFullCidr, nil) + assert.Nil(t, uNilParent) + assert.ErrorIs(t, err, ErrNilIPBlock)Also applies to: 990-993
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@db/pkg/db/ipam/ipam_test.go` around lines 900 - 903, The test currently calls GetIpamUsageForVpcPrefix and only checks for ErrNilVpcPrefix; add explicit assertions for the nil ipBlock error path by invoking the same helper with a nil ipBlock (ipBlock == nil) and asserting the returned error is ErrNilIPBlock and the result is nil; update both test cases covering lines around the GetIpamUsageForVpcPrefix calls (and the analogous calls around lines 990-993) to include assert.Nil(t, result) and assert.ErrorIs(t, err, ErrNilIPBlock) so the nil-parent (ipBlock) branch in GetIpamUsageForVpcPrefix is covered.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@db/pkg/db/ipam/ipam_test.go`:
- Around line 909-912: The test currently compares only AcquiredIPs between
usages for full CIDR and bare-network inputs (u1 and u2 from
GetIpamUsageForVpcPrefix); add assertions to also compare AcquiredPrefixes (and
optionally AvailableSmallestPrefixes) to ensure prefix-level parity: after the
existing assert.Equal(t, u1.AcquiredIPs, u2.AcquiredIPs) add assertions like
assert.Equal(t, u1.AcquiredPrefixes, u2.AcquiredPrefixes) and assert.Equal(t,
u1.AvailableSmallestPrefixes, u2.AvailableSmallestPrefixes) for the same u1/u2
pairs (repeat the same additions for the second occurrence around lines
1003–1005).
---
Duplicate comments:
In `@api/pkg/api/handler/subnet.go`:
- Around line 586-599: The current loop in subnet.go that builds puSubnetMap
when includeUsageStats is true (using ipam.NewIpamStorage and
ipam.GetIpamUsageForSubnet) silently logs errors and continues, producing
partial usageStats; change this to fail-fast: when ipam.GetIpamUsageForSubnet
returns an error (serr) or sn.IPv4Block is nil, stop processing and return an
HTTP error response (propagate/translate serr into the handler's error return
path) instead of continuing, ensuring the GetAll handler returns a non-200 error
consistently like the Get handler does.
---
Nitpick comments:
In `@db/pkg/db/ipam/ipam_test.go`:
- Around line 900-903: The test currently calls GetIpamUsageForVpcPrefix and
only checks for ErrNilVpcPrefix; add explicit assertions for the nil ipBlock
error path by invoking the same helper with a nil ipBlock (ipBlock == nil) and
asserting the returned error is ErrNilIPBlock and the result is nil; update both
test cases covering lines around the GetIpamUsageForVpcPrefix calls (and the
analogous calls around lines 990-993) to include assert.Nil(t, result) and
assert.ErrorIs(t, err, ErrNilIPBlock) so the nil-parent (ipBlock) branch in
GetIpamUsageForVpcPrefix is covered.
In `@openapi/spec.yaml`:
- Around line 13351-13356: Update the OpenAPI description for the usageStats
property (schema reference IpBlockUsageStats) to explicitly state that the field
is only present when the query parameter includeUsageStats=true and is omitted
(not returned as null) when includeUsageStats is false or absent; apply the same
clarification to the other occurrence of usageStats in the spec so generated
SDKs won’t confuse missing vs null values.
- Around line 2914-2920: Create a single reusable OpenAPI parameter named
includeUsageStats under components.parameters with the same schema/in, name and
description as the duplicated blocks, then replace each duplicated inline
parameter in the four operations (the blocks currently declaring
includeUsageStats) with a $ref to that component (e.g., $ref:
'#/components/parameters/includeUsageStats'); ensure the component uses type:
boolean and retains the exact description text and update all occurrences that
match the duplicates noted so they all reference the single component.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 39392bea-728e-4da3-a957-8c3e6f390838
📒 Files selected for processing (241)
api/pkg/api/handler/subnet.goapi/pkg/api/handler/subnet_test.goapi/pkg/api/handler/util/common/common.goapi/pkg/api/handler/vpcprefix.goapi/pkg/api/handler/vpcprefix_test.goapi/pkg/api/model/subnet.goapi/pkg/api/model/subnet_test.goapi/pkg/api/model/vpcprefix.goapi/pkg/api/model/vpcprefix_test.godb/pkg/db/ipam/ipam.godb/pkg/db/ipam/ipam_test.goopenapi/spec.yamlsdk/standard/api_allocation.gosdk/standard/api_audit.gosdk/standard/api_dpu_extension_service.gosdk/standard/api_expected_machine.gosdk/standard/api_expected_power_shelf.gosdk/standard/api_expected_switch.gosdk/standard/api_infini_band_partition.gosdk/standard/api_infrastructure_provider.gosdk/standard/api_instance.gosdk/standard/api_instance_type.gosdk/standard/api_ip_block.gosdk/standard/api_machine.gosdk/standard/api_metadata.gosdk/standard/api_network_security_group.gosdk/standard/api_nv_link_logical_partition.gosdk/standard/api_operating_system.gosdk/standard/api_rack.gosdk/standard/api_service_account.gosdk/standard/api_site.gosdk/standard/api_sku.gosdk/standard/api_ssh_key.gosdk/standard/api_ssh_key_group.gosdk/standard/api_subnet.gosdk/standard/api_tenant.gosdk/standard/api_tenant_account.gosdk/standard/api_tray.gosdk/standard/api_user.gosdk/standard/api_vpc.gosdk/standard/api_vpc_peering.gosdk/standard/api_vpc_prefix.gosdk/standard/client.gosdk/standard/configuration.gosdk/standard/model_allocation.gosdk/standard/model_allocation_constraint.gosdk/standard/model_allocation_constraint_create_request.gosdk/standard/model_allocation_constraint_update_request.gosdk/standard/model_allocation_create_request.gosdk/standard/model_allocation_stats.gosdk/standard/model_allocation_status.gosdk/standard/model_allocation_update_request.gosdk/standard/model_audit_entry.gosdk/standard/model_batch_bring_up_rack_request.gosdk/standard/model_batch_instance_create_request.gosdk/standard/model_batch_rack_firmware_update_request.gosdk/standard/model_batch_tray_firmware_update_request.gosdk/standard/model_batch_update_rack_power_state_request.gosdk/standard/model_batch_update_tray_power_state_request.gosdk/standard/model_bmc_info.gosdk/standard/model_bring_up_rack_request.gosdk/standard/model_bring_up_rack_response.gosdk/standard/model_carbide_api_error.gosdk/standard/model_component_diff.gosdk/standard/model_deprecation.gosdk/standard/model_dpu_extension_service.gosdk/standard/model_dpu_extension_service_create_request.gosdk/standard/model_dpu_extension_service_credentials.gosdk/standard/model_dpu_extension_service_deployment.gosdk/standard/model_dpu_extension_service_deployment_request.gosdk/standard/model_dpu_extension_service_deployment_status.gosdk/standard/model_dpu_extension_service_observability.gosdk/standard/model_dpu_extension_service_observability_config.gosdk/standard/model_dpu_extension_service_observability_logging.gosdk/standard/model_dpu_extension_service_observability_prometheus.gosdk/standard/model_dpu_extension_service_status.gosdk/standard/model_dpu_extension_service_summary.gosdk/standard/model_dpu_extension_service_update_request.gosdk/standard/model_dpu_extension_service_version_info.gosdk/standard/model_expected_machine.gosdk/standard/model_expected_machine_create_request.gosdk/standard/model_expected_machine_update_request.gosdk/standard/model_expected_power_shelf.gosdk/standard/model_expected_power_shelf_create_request.gosdk/standard/model_expected_power_shelf_update_request.gosdk/standard/model_expected_switch.gosdk/standard/model_expected_switch_create_request.gosdk/standard/model_expected_switch_update_request.gosdk/standard/model_field_diff.gosdk/standard/model_firmware_update_request.gosdk/standard/model_firmware_update_response.gosdk/standard/model_infini_band_interface.gosdk/standard/model_infini_band_interface_create_request.gosdk/standard/model_infini_band_interface_status.gosdk/standard/model_infini_band_partition.gosdk/standard/model_infini_band_partition_create_request.gosdk/standard/model_infini_band_partition_status.gosdk/standard/model_infini_band_partition_update_request.gosdk/standard/model_infrastructure_provider.gosdk/standard/model_infrastructure_provider_stats.gosdk/standard/model_instance.gosdk/standard/model_instance_count_by_status.gosdk/standard/model_instance_create_request.gosdk/standard/model_instance_delete_request.gosdk/standard/model_instance_status.gosdk/standard/model_instance_type.gosdk/standard/model_instance_type_allocation_stats.gosdk/standard/model_instance_type_capability_create_request.gosdk/standard/model_instance_type_create_request.gosdk/standard/model_instance_type_stats.gosdk/standard/model_instance_type_status.gosdk/standard/model_instance_type_summary.gosdk/standard/model_instance_type_update_request.gosdk/standard/model_instance_update_request.gosdk/standard/model_interface.gosdk/standard/model_interface_create_request.gosdk/standard/model_interface_status.gosdk/standard/model_ip_block.gosdk/standard/model_ip_block_count_by_status.gosdk/standard/model_ip_block_create_request.gosdk/standard/model_ip_block_status.gosdk/standard/model_ip_block_summary.gosdk/standard/model_ip_block_update_request.gosdk/standard/model_ip_block_usage_stats.gosdk/standard/model_machine.gosdk/standard/model_machine_bmc_info.gosdk/standard/model_machine_capability.gosdk/standard/model_machine_count_by_status.gosdk/standard/model_machine_dmi_data.gosdk/standard/model_machine_gpu_info.gosdk/standard/model_machine_gpu_stats.gosdk/standard/model_machine_health.gosdk/standard/model_machine_health_issue.gosdk/standard/model_machine_health_probe_alert.gosdk/standard/model_machine_health_probe_success.gosdk/standard/model_machine_infini_band_interface.gosdk/standard/model_machine_instance_type.gosdk/standard/model_machine_instance_type_create_request.gosdk/standard/model_machine_instance_type_stats.gosdk/standard/model_machine_instance_type_summary.gosdk/standard/model_machine_interface.gosdk/standard/model_machine_metadata.gosdk/standard/model_machine_network_interface.gosdk/standard/model_machine_status.gosdk/standard/model_machine_status_breakdown.gosdk/standard/model_machine_summary.gosdk/standard/model_machine_update_request.gosdk/standard/model_metadata.gosdk/standard/model_network_security_group.gosdk/standard/model_network_security_group_create_request.gosdk/standard/model_network_security_group_propagation_details.gosdk/standard/model_network_security_group_propagation_status.gosdk/standard/model_network_security_group_rule.gosdk/standard/model_network_security_group_status.gosdk/standard/model_network_security_group_update_request.gosdk/standard/model_nv_link_interface.gosdk/standard/model_nv_link_interface_create_request.gosdk/standard/model_nv_link_interface_status.gosdk/standard/model_nv_link_logical_partition.gosdk/standard/model_nv_link_logical_partition_create_request.gosdk/standard/model_nv_link_logical_partition_status.gosdk/standard/model_nv_link_logical_partition_update_request.gosdk/standard/model_operating_system.gosdk/standard/model_operating_system_create_request.gosdk/standard/model_operating_system_site_association.gosdk/standard/model_operating_system_status.gosdk/standard/model_operating_system_update_request.gosdk/standard/model_rack.gosdk/standard/model_rack_component.gosdk/standard/model_rack_filter.gosdk/standard/model_rack_location.gosdk/standard/model_rack_task.gosdk/standard/model_rack_validation_result.gosdk/standard/model_service_account.gosdk/standard/model_site.gosdk/standard/model_site_capabilities.gosdk/standard/model_site_contact.gosdk/standard/model_site_create_request.gosdk/standard/model_site_location.gosdk/standard/model_site_machine_stats.gosdk/standard/model_site_machine_stats_by_allocation.gosdk/standard/model_site_machine_stats_by_health.gosdk/standard/model_site_machine_stats_by_status.gosdk/standard/model_site_machine_stats_by_status_and_health.gosdk/standard/model_site_status.gosdk/standard/model_site_summary.gosdk/standard/model_site_update_request.gosdk/standard/model_sku.gosdk/standard/model_sku_chassis.gosdk/standard/model_sku_components.gosdk/standard/model_sku_cpu.gosdk/standard/model_sku_ethernet_device.gosdk/standard/model_sku_gpu.gosdk/standard/model_sku_infiniband_device.gosdk/standard/model_sku_memory.gosdk/standard/model_sku_storage.gosdk/standard/model_sku_tpm.gosdk/standard/model_ssh_key.gosdk/standard/model_ssh_key_create_request.gosdk/standard/model_ssh_key_group.gosdk/standard/model_ssh_key_group_create_request.gosdk/standard/model_ssh_key_group_site_association.gosdk/standard/model_ssh_key_group_site_association_status.gosdk/standard/model_ssh_key_group_status.gosdk/standard/model_ssh_key_group_update_request.gosdk/standard/model_ssh_key_update_request.gosdk/standard/model_status_detail.gosdk/standard/model_subnet.gosdk/standard/model_subnet_count_by_status.gosdk/standard/model_subnet_create_request.gosdk/standard/model_subnet_status.gosdk/standard/model_subnet_update_request.gosdk/standard/model_tenant.gosdk/standard/model_tenant_account.gosdk/standard/model_tenant_account_count_by_status.gosdk/standard/model_tenant_account_create_request.gosdk/standard/model_tenant_account_status.gosdk/standard/model_tenant_capabilities.gosdk/standard/model_tenant_instance_type_stats.gosdk/standard/model_tenant_stats.gosdk/standard/model_tray.gosdk/standard/model_tray_filter.gosdk/standard/model_tray_position.gosdk/standard/model_update_power_state_request.gosdk/standard/model_update_power_state_response.gosdk/standard/model_user.gosdk/standard/model_vpc.gosdk/standard/model_vpc_count_by_status.gosdk/standard/model_vpc_create_request.gosdk/standard/model_vpc_peering.gosdk/standard/model_vpc_peering_create_request.gosdk/standard/model_vpc_peering_status.gosdk/standard/model_vpc_prefix.gosdk/standard/model_vpc_prefix_create_request.gosdk/standard/model_vpc_prefix_status.gosdk/standard/model_vpc_prefix_update_request.gosdk/standard/model_vpc_status.gosdk/standard/model_vpc_update_request.gosdk/standard/model_vpc_virtualization_update_request.gosdk/standard/response.gosdk/standard/utils.go
✅ Files skipped from review due to trivial changes (223)
- sdk/standard/model_dpu_extension_service_create_request.go
- sdk/standard/model_machine_capability.go
- sdk/standard/model_allocation_stats.go
- sdk/standard/model_interface_status.go
- sdk/standard/model_ip_block_count_by_status.go
- sdk/standard/model_infrastructure_provider_stats.go
- sdk/standard/model_operating_system_site_association.go
- sdk/standard/model_allocation.go
- sdk/standard/configuration.go
- sdk/standard/model_ssh_key_group.go
- sdk/standard/model_sku.go
- sdk/standard/model_site_machine_stats_by_status.go
- sdk/standard/model_dpu_extension_service_deployment_status.go
- sdk/standard/model_allocation_constraint_update_request.go
- sdk/standard/model_sku_storage.go
- sdk/standard/model_machine_bmc_info.go
- sdk/standard/model_batch_rack_firmware_update_request.go
- sdk/standard/model_site_contact.go
- sdk/standard/api_metadata.go
- sdk/standard/api_expected_switch.go
- sdk/standard/model_network_security_group_propagation_status.go
- sdk/standard/model_firmware_update_response.go
- sdk/standard/model_nv_link_logical_partition_create_request.go
- sdk/standard/model_audit_entry.go
- sdk/standard/model_ssh_key_group_create_request.go
- sdk/standard/model_ssh_key_group_site_association_status.go
- sdk/standard/model_infini_band_partition_status.go
- sdk/standard/model_vpc_count_by_status.go
- sdk/standard/model_vpc_prefix_update_request.go
- sdk/standard/model_machine_instance_type.go
- sdk/standard/model_ssh_key_group_status.go
- sdk/standard/model_tenant_account_status.go
- sdk/standard/model_tenant_capabilities.go
- sdk/standard/model_vpc_peering_create_request.go
- sdk/standard/model_vpc_prefix_status.go
- sdk/standard/model_machine_count_by_status.go
- sdk/standard/model_user.go
- sdk/standard/model_machine_dmi_data.go
- sdk/standard/model_nv_link_interface.go
- sdk/standard/model_allocation_status.go
- sdk/standard/model_dpu_extension_service_update_request.go
- sdk/standard/model_dpu_extension_service_credentials.go
- sdk/standard/api_nv_link_logical_partition.go
- sdk/standard/model_instance_type_stats.go
- sdk/standard/model_allocation_constraint.go
- sdk/standard/model_allocation_constraint_create_request.go
- sdk/standard/model_ip_block_summary.go
- sdk/standard/model_tray.go
- sdk/standard/model_sku_components.go
- sdk/standard/model_sku_ethernet_device.go
- sdk/standard/model_nv_link_interface_create_request.go
- sdk/standard/model_machine_status_breakdown.go
- sdk/standard/model_dpu_extension_service.go
- sdk/standard/model_dpu_extension_service_observability.go
- sdk/standard/model_dpu_extension_service_deployment_request.go
- sdk/standard/model_infrastructure_provider.go
- sdk/standard/model_ip_block.go
- sdk/standard/model_machine_instance_type_create_request.go
- sdk/standard/model_dpu_extension_service_observability_config.go
- sdk/standard/model_vpc_virtualization_update_request.go
- sdk/standard/model_machine_metadata.go
- sdk/standard/model_infini_band_interface.go
- sdk/standard/model_tray_position.go
- sdk/standard/model_instance_type_status.go
- sdk/standard/model_batch_update_tray_power_state_request.go
- sdk/standard/model_sku_cpu.go
- sdk/standard/api_ssh_key.go
- sdk/standard/model_expected_machine_create_request.go
- sdk/standard/model_field_diff.go
- sdk/standard/model_dpu_extension_service_version_info.go
- sdk/standard/model_instance_count_by_status.go
- sdk/standard/model_site_summary.go
- sdk/standard/model_ssh_key_group_update_request.go
- sdk/standard/model_sku_memory.go
- sdk/standard/model_ssh_key_update_request.go
- sdk/standard/model_instance_type_allocation_stats.go
- sdk/standard/model_machine_network_interface.go
- sdk/standard/model_sku_infiniband_device.go
- sdk/standard/model_update_power_state_request.go
- sdk/standard/model_nv_link_logical_partition_update_request.go
- sdk/standard/model_vpc_peering.go
- sdk/standard/model_subnet_status.go
- sdk/standard/model_nv_link_interface_status.go
- sdk/standard/model_rack_validation_result.go
- sdk/standard/model_rack_location.go
- sdk/standard/model_rack.go
- sdk/standard/model_site_machine_stats_by_allocation.go
- sdk/standard/model_instance.go
- sdk/standard/model_status_detail.go
- sdk/standard/model_instance_status.go
- sdk/standard/model_sku_chassis.go
- sdk/standard/model_tenant_account.go
- sdk/standard/model_subnet_update_request.go
- sdk/standard/model_tray_filter.go
- sdk/standard/model_machine_health_issue.go
- sdk/standard/model_site_location.go
- sdk/standard/model_batch_update_rack_power_state_request.go
- sdk/standard/api_vpc_peering.go
- sdk/standard/model_ip_block_update_request.go
- sdk/standard/model_batch_tray_firmware_update_request.go
- sdk/standard/api_allocation.go
- sdk/standard/model_machine_gpu_stats.go
- sdk/standard/model_dpu_extension_service_status.go
- sdk/standard/model_machine_status.go
- sdk/standard/utils.go
- sdk/standard/model_tenant_account_create_request.go
- sdk/standard/model_ssh_key_create_request.go
- sdk/standard/api_instance.go
- sdk/standard/model_service_account.go
- sdk/standard/model_instance_delete_request.go
- sdk/standard/model_machine_gpu_info.go
- sdk/standard/model_bring_up_rack_response.go
- sdk/standard/model_rack_component.go
- sdk/standard/model_expected_machine.go
- sdk/standard/model_carbide_api_error.go
- sdk/standard/model_instance_type.go
- sdk/standard/model_metadata.go
- sdk/standard/model_batch_instance_create_request.go
- sdk/standard/model_dpu_extension_service_summary.go
- sdk/standard/model_tenant_stats.go
- sdk/standard/model_expected_power_shelf_create_request.go
- sdk/standard/model_site_create_request.go
- sdk/standard/model_allocation_create_request.go
- sdk/standard/model_network_security_group_propagation_details.go
- sdk/standard/api_ip_block.go
- sdk/standard/api_network_security_group.go
- sdk/standard/model_subnet_count_by_status.go
- sdk/standard/model_machine_health_probe_alert.go
- sdk/standard/model_vpc_peering_status.go
- sdk/standard/model_machine_infini_band_interface.go
- sdk/standard/model_tenant_account_count_by_status.go
- sdk/standard/api_infrastructure_provider.go
- sdk/standard/model_dpu_extension_service_observability_logging.go
- sdk/standard/api_tenant_account.go
- sdk/standard/model_dpu_extension_service_observability_prometheus.go
- sdk/standard/model_sku_tpm.go
- sdk/standard/model_bring_up_rack_request.go
- sdk/standard/model_site_update_request.go
- sdk/standard/model_network_security_group_status.go
- sdk/standard/model_tenant.go
- sdk/standard/model_network_security_group_update_request.go
- sdk/standard/model_ip_block_create_request.go
- sdk/standard/model_machine.go
- sdk/standard/model_rack_filter.go
- sdk/standard/model_instance_type_create_request.go
- sdk/standard/model_ip_block_status.go
- sdk/standard/model_machine_instance_type_stats.go
- sdk/standard/model_subnet.go
- sdk/standard/api_vpc.go
- sdk/standard/model_allocation_update_request.go
- sdk/standard/model_machine_health.go
- sdk/standard/model_rack_task.go
- sdk/standard/model_machine_update_request.go
- sdk/standard/model_instance_type_summary.go
- sdk/standard/model_tenant_instance_type_stats.go
- sdk/standard/model_nv_link_logical_partition.go
- sdk/standard/model_instance_type_capability_create_request.go
- sdk/standard/model_interface_create_request.go
- sdk/standard/model_subnet_create_request.go
- sdk/standard/model_machine_interface.go
- sdk/standard/model_operating_system_status.go
- sdk/standard/api_operating_system.go
- sdk/standard/api_infini_band_partition.go
- sdk/standard/api_rack.go
- sdk/standard/model_nv_link_logical_partition_status.go
- sdk/standard/model_ssh_key.go
- sdk/standard/model_batch_bring_up_rack_request.go
- sdk/standard/api_service_account.go
- sdk/standard/api_instance_type.go
- sdk/standard/model_bmc_info.go
- sdk/standard/model_infini_band_interface_create_request.go
- sdk/standard/model_component_diff.go
- sdk/standard/model_vpc_prefix_create_request.go
- sdk/standard/model_vpc_status.go
- sdk/standard/model_deprecation.go
- sdk/standard/api_expected_machine.go
- sdk/standard/model_site_machine_stats_by_status_and_health.go
- sdk/standard/model_ssh_key_group_site_association.go
- sdk/standard/model_expected_switch_update_request.go
- sdk/standard/model_machine_summary.go
- sdk/standard/model_infini_band_partition_update_request.go
- sdk/standard/model_site_capabilities.go
- sdk/standard/model_site_machine_stats_by_health.go
- sdk/standard/model_expected_switch_create_request.go
- sdk/standard/model_vpc_create_request.go
- sdk/standard/api_tenant.go
- sdk/standard/model_sku_gpu.go
- sdk/standard/api_site.go
- sdk/standard/api_dpu_extension_service.go
- sdk/standard/model_firmware_update_request.go
- sdk/standard/api_subnet.go
- sdk/standard/model_instance_update_request.go
- sdk/standard/model_site_status.go
- sdk/standard/model_expected_switch.go
- sdk/standard/model_operating_system.go
- sdk/standard/model_infini_band_partition_create_request.go
- sdk/standard/model_infini_band_partition.go
- sdk/standard/model_operating_system_update_request.go
- sdk/standard/model_site_machine_stats.go
- sdk/standard/model_network_security_group_create_request.go
- sdk/standard/api_expected_power_shelf.go
- sdk/standard/api_ssh_key_group.go
- sdk/standard/model_instance_create_request.go
- sdk/standard/model_ip_block_usage_stats.go
- sdk/standard/api_user.go
- sdk/standard/model_operating_system_create_request.go
- sdk/standard/model_machine_instance_type_summary.go
- sdk/standard/api_tray.go
- sdk/standard/model_network_security_group.go
- sdk/standard/model_expected_power_shelf_update_request.go
- sdk/standard/model_vpc_update_request.go
- sdk/standard/model_update_power_state_response.go
- sdk/standard/api_sku.go
- sdk/standard/model_dpu_extension_service_deployment.go
- sdk/standard/model_machine_health_probe_success.go
- sdk/standard/model_network_security_group_rule.go
- sdk/standard/api_machine.go
- sdk/standard/api_vpc_prefix.go
- db/pkg/db/ipam/ipam.go
- sdk/standard/model_interface.go
- sdk/standard/model_vpc.go
- sdk/standard/model_site.go
- sdk/standard/model_instance_type_update_request.go
🚧 Files skipped from review as they are similar to previous changes (10)
- api/pkg/api/model/subnet_test.go
- sdk/standard/model_infini_band_interface_status.go
- sdk/standard/response.go
- api/pkg/api/model/subnet.go
- sdk/standard/api_audit.go
- sdk/standard/client.go
- sdk/standard/model_expected_power_shelf.go
- sdk/standard/model_expected_machine_update_request.go
- api/pkg/api/handler/vpcprefix.go
- api/pkg/api/handler/subnet_test.go
426678f to
8493694
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@api/pkg/api/handler/vpcprefix.go`:
- Around line 518-534: When includeUsageStats is true, do not log-and-skip IPAM
failures for individual prefixes; instead surface an error for the whole list
request. In the loop that iterates vpcPrefixes (variables: vpcPrefixes, vp,
puVpMap) where you call ipam.GetIpamUsageForVpcPrefix using ipamStorage, change
the error handling so that any non-nil error (or missing vp.IPBlock) returns a
proper HTTP error from the handler rather than continuing — mirror the
single-GET behavior used elsewhere (the code path that fails the request on ipam
errors) so callers get a 4xx/5xx response instead of a 200 with partial/missing
usageStats. Ensure you still log the error with logger.Error().Err(...) before
returning.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: d7650058-9eda-40c3-8ba3-35070c5583fa
📒 Files selected for processing (241)
api/pkg/api/handler/subnet.goapi/pkg/api/handler/subnet_test.goapi/pkg/api/handler/util/common/common.goapi/pkg/api/handler/vpcprefix.goapi/pkg/api/handler/vpcprefix_test.goapi/pkg/api/model/subnet.goapi/pkg/api/model/subnet_test.goapi/pkg/api/model/vpcprefix.goapi/pkg/api/model/vpcprefix_test.godb/pkg/db/ipam/ipam.godb/pkg/db/ipam/ipam_test.goopenapi/spec.yamlsdk/standard/api_allocation.gosdk/standard/api_audit.gosdk/standard/api_dpu_extension_service.gosdk/standard/api_expected_machine.gosdk/standard/api_expected_power_shelf.gosdk/standard/api_expected_switch.gosdk/standard/api_infini_band_partition.gosdk/standard/api_infrastructure_provider.gosdk/standard/api_instance.gosdk/standard/api_instance_type.gosdk/standard/api_ip_block.gosdk/standard/api_machine.gosdk/standard/api_metadata.gosdk/standard/api_network_security_group.gosdk/standard/api_nv_link_logical_partition.gosdk/standard/api_operating_system.gosdk/standard/api_rack.gosdk/standard/api_service_account.gosdk/standard/api_site.gosdk/standard/api_sku.gosdk/standard/api_ssh_key.gosdk/standard/api_ssh_key_group.gosdk/standard/api_subnet.gosdk/standard/api_tenant.gosdk/standard/api_tenant_account.gosdk/standard/api_tray.gosdk/standard/api_user.gosdk/standard/api_vpc.gosdk/standard/api_vpc_peering.gosdk/standard/api_vpc_prefix.gosdk/standard/client.gosdk/standard/configuration.gosdk/standard/model_allocation.gosdk/standard/model_allocation_constraint.gosdk/standard/model_allocation_constraint_create_request.gosdk/standard/model_allocation_constraint_update_request.gosdk/standard/model_allocation_create_request.gosdk/standard/model_allocation_stats.gosdk/standard/model_allocation_status.gosdk/standard/model_allocation_update_request.gosdk/standard/model_audit_entry.gosdk/standard/model_batch_bring_up_rack_request.gosdk/standard/model_batch_instance_create_request.gosdk/standard/model_batch_rack_firmware_update_request.gosdk/standard/model_batch_tray_firmware_update_request.gosdk/standard/model_batch_update_rack_power_state_request.gosdk/standard/model_batch_update_tray_power_state_request.gosdk/standard/model_bmc_info.gosdk/standard/model_bring_up_rack_request.gosdk/standard/model_bring_up_rack_response.gosdk/standard/model_carbide_api_error.gosdk/standard/model_component_diff.gosdk/standard/model_deprecation.gosdk/standard/model_dpu_extension_service.gosdk/standard/model_dpu_extension_service_create_request.gosdk/standard/model_dpu_extension_service_credentials.gosdk/standard/model_dpu_extension_service_deployment.gosdk/standard/model_dpu_extension_service_deployment_request.gosdk/standard/model_dpu_extension_service_deployment_status.gosdk/standard/model_dpu_extension_service_observability.gosdk/standard/model_dpu_extension_service_observability_config.gosdk/standard/model_dpu_extension_service_observability_logging.gosdk/standard/model_dpu_extension_service_observability_prometheus.gosdk/standard/model_dpu_extension_service_status.gosdk/standard/model_dpu_extension_service_summary.gosdk/standard/model_dpu_extension_service_update_request.gosdk/standard/model_dpu_extension_service_version_info.gosdk/standard/model_expected_machine.gosdk/standard/model_expected_machine_create_request.gosdk/standard/model_expected_machine_update_request.gosdk/standard/model_expected_power_shelf.gosdk/standard/model_expected_power_shelf_create_request.gosdk/standard/model_expected_power_shelf_update_request.gosdk/standard/model_expected_switch.gosdk/standard/model_expected_switch_create_request.gosdk/standard/model_expected_switch_update_request.gosdk/standard/model_field_diff.gosdk/standard/model_firmware_update_request.gosdk/standard/model_firmware_update_response.gosdk/standard/model_infini_band_interface.gosdk/standard/model_infini_band_interface_create_request.gosdk/standard/model_infini_band_interface_status.gosdk/standard/model_infini_band_partition.gosdk/standard/model_infini_band_partition_create_request.gosdk/standard/model_infini_band_partition_status.gosdk/standard/model_infini_band_partition_update_request.gosdk/standard/model_infrastructure_provider.gosdk/standard/model_infrastructure_provider_stats.gosdk/standard/model_instance.gosdk/standard/model_instance_count_by_status.gosdk/standard/model_instance_create_request.gosdk/standard/model_instance_delete_request.gosdk/standard/model_instance_status.gosdk/standard/model_instance_type.gosdk/standard/model_instance_type_allocation_stats.gosdk/standard/model_instance_type_capability_create_request.gosdk/standard/model_instance_type_create_request.gosdk/standard/model_instance_type_stats.gosdk/standard/model_instance_type_status.gosdk/standard/model_instance_type_summary.gosdk/standard/model_instance_type_update_request.gosdk/standard/model_instance_update_request.gosdk/standard/model_interface.gosdk/standard/model_interface_create_request.gosdk/standard/model_interface_status.gosdk/standard/model_ip_block.gosdk/standard/model_ip_block_count_by_status.gosdk/standard/model_ip_block_create_request.gosdk/standard/model_ip_block_status.gosdk/standard/model_ip_block_summary.gosdk/standard/model_ip_block_update_request.gosdk/standard/model_ip_block_usage_stats.gosdk/standard/model_machine.gosdk/standard/model_machine_bmc_info.gosdk/standard/model_machine_capability.gosdk/standard/model_machine_count_by_status.gosdk/standard/model_machine_dmi_data.gosdk/standard/model_machine_gpu_info.gosdk/standard/model_machine_gpu_stats.gosdk/standard/model_machine_health.gosdk/standard/model_machine_health_issue.gosdk/standard/model_machine_health_probe_alert.gosdk/standard/model_machine_health_probe_success.gosdk/standard/model_machine_infini_band_interface.gosdk/standard/model_machine_instance_type.gosdk/standard/model_machine_instance_type_create_request.gosdk/standard/model_machine_instance_type_stats.gosdk/standard/model_machine_instance_type_summary.gosdk/standard/model_machine_interface.gosdk/standard/model_machine_metadata.gosdk/standard/model_machine_network_interface.gosdk/standard/model_machine_status.gosdk/standard/model_machine_status_breakdown.gosdk/standard/model_machine_summary.gosdk/standard/model_machine_update_request.gosdk/standard/model_metadata.gosdk/standard/model_network_security_group.gosdk/standard/model_network_security_group_create_request.gosdk/standard/model_network_security_group_propagation_details.gosdk/standard/model_network_security_group_propagation_status.gosdk/standard/model_network_security_group_rule.gosdk/standard/model_network_security_group_status.gosdk/standard/model_network_security_group_update_request.gosdk/standard/model_nv_link_interface.gosdk/standard/model_nv_link_interface_create_request.gosdk/standard/model_nv_link_interface_status.gosdk/standard/model_nv_link_logical_partition.gosdk/standard/model_nv_link_logical_partition_create_request.gosdk/standard/model_nv_link_logical_partition_status.gosdk/standard/model_nv_link_logical_partition_update_request.gosdk/standard/model_operating_system.gosdk/standard/model_operating_system_create_request.gosdk/standard/model_operating_system_site_association.gosdk/standard/model_operating_system_status.gosdk/standard/model_operating_system_update_request.gosdk/standard/model_rack.gosdk/standard/model_rack_component.gosdk/standard/model_rack_filter.gosdk/standard/model_rack_location.gosdk/standard/model_rack_task.gosdk/standard/model_rack_validation_result.gosdk/standard/model_service_account.gosdk/standard/model_site.gosdk/standard/model_site_capabilities.gosdk/standard/model_site_contact.gosdk/standard/model_site_create_request.gosdk/standard/model_site_location.gosdk/standard/model_site_machine_stats.gosdk/standard/model_site_machine_stats_by_allocation.gosdk/standard/model_site_machine_stats_by_health.gosdk/standard/model_site_machine_stats_by_status.gosdk/standard/model_site_machine_stats_by_status_and_health.gosdk/standard/model_site_status.gosdk/standard/model_site_summary.gosdk/standard/model_site_update_request.gosdk/standard/model_sku.gosdk/standard/model_sku_chassis.gosdk/standard/model_sku_components.gosdk/standard/model_sku_cpu.gosdk/standard/model_sku_ethernet_device.gosdk/standard/model_sku_gpu.gosdk/standard/model_sku_infiniband_device.gosdk/standard/model_sku_memory.gosdk/standard/model_sku_storage.gosdk/standard/model_sku_tpm.gosdk/standard/model_ssh_key.gosdk/standard/model_ssh_key_create_request.gosdk/standard/model_ssh_key_group.gosdk/standard/model_ssh_key_group_create_request.gosdk/standard/model_ssh_key_group_site_association.gosdk/standard/model_ssh_key_group_site_association_status.gosdk/standard/model_ssh_key_group_status.gosdk/standard/model_ssh_key_group_update_request.gosdk/standard/model_ssh_key_update_request.gosdk/standard/model_status_detail.gosdk/standard/model_subnet.gosdk/standard/model_subnet_count_by_status.gosdk/standard/model_subnet_create_request.gosdk/standard/model_subnet_status.gosdk/standard/model_subnet_update_request.gosdk/standard/model_tenant.gosdk/standard/model_tenant_account.gosdk/standard/model_tenant_account_count_by_status.gosdk/standard/model_tenant_account_create_request.gosdk/standard/model_tenant_account_status.gosdk/standard/model_tenant_capabilities.gosdk/standard/model_tenant_instance_type_stats.gosdk/standard/model_tenant_stats.gosdk/standard/model_tray.gosdk/standard/model_tray_filter.gosdk/standard/model_tray_position.gosdk/standard/model_update_power_state_request.gosdk/standard/model_update_power_state_response.gosdk/standard/model_user.gosdk/standard/model_vpc.gosdk/standard/model_vpc_count_by_status.gosdk/standard/model_vpc_create_request.gosdk/standard/model_vpc_peering.gosdk/standard/model_vpc_peering_create_request.gosdk/standard/model_vpc_peering_status.gosdk/standard/model_vpc_prefix.gosdk/standard/model_vpc_prefix_create_request.gosdk/standard/model_vpc_prefix_status.gosdk/standard/model_vpc_prefix_update_request.gosdk/standard/model_vpc_status.gosdk/standard/model_vpc_update_request.gosdk/standard/model_vpc_virtualization_update_request.gosdk/standard/response.gosdk/standard/utils.go
✅ Files skipped from review due to trivial changes (221)
- sdk/standard/model_allocation_stats.go
- sdk/standard/model_ip_block_count_by_status.go
- sdk/standard/model_instance_type_summary.go
- sdk/standard/model_component_diff.go
- sdk/standard/model_allocation_constraint_update_request.go
- sdk/standard/api_vpc_peering.go
- sdk/standard/model_operating_system_status.go
- sdk/standard/model_dpu_extension_service_summary.go
- sdk/standard/api_service_account.go
- sdk/standard/model_interface_status.go
- sdk/standard/model_update_power_state_request.go
- sdk/standard/model_dpu_extension_service_deployment_status.go
- sdk/standard/model_tenant_instance_type_stats.go
- sdk/standard/model_batch_update_rack_power_state_request.go
- sdk/standard/model_infrastructure_provider.go
- sdk/standard/model_rack.go
- sdk/standard/model_firmware_update_response.go
- sdk/standard/model_ssh_key_group_site_association_status.go
- sdk/standard/model_subnet_status.go
- sdk/standard/model_bring_up_rack_response.go
- sdk/standard/model_infini_band_partition_status.go
- sdk/standard/model_instance_type_stats.go
- sdk/standard/api_sku.go
- sdk/standard/model_dpu_extension_service_status.go
- sdk/standard/model_instance_type_capability_create_request.go
- sdk/standard/model_dpu_extension_service_observability_config.go
- sdk/standard/model_instance_status.go
- sdk/standard/model_dpu_extension_service_update_request.go
- sdk/standard/model_sku_infiniband_device.go
- sdk/standard/model_sku_chassis.go
- sdk/standard/model_vpc_prefix_status.go
- sdk/standard/model_nv_link_logical_partition_update_request.go
- sdk/standard/model_vpc_prefix_update_request.go
- sdk/standard/model_site_machine_stats.go
- sdk/standard/model_bring_up_rack_request.go
- sdk/standard/model_sku_cpu.go
- sdk/standard/model_service_account.go
- sdk/standard/model_rack_filter.go
- sdk/standard/model_machine_network_interface.go
- sdk/standard/api_infrastructure_provider.go
- sdk/standard/model_machine_gpu_stats.go
- sdk/standard/model_bmc_info.go
- sdk/standard/model_tenant_account_create_request.go
- sdk/standard/model_firmware_update_request.go
- sdk/standard/model_infini_band_partition_update_request.go
- sdk/standard/model_site_capabilities.go
- sdk/standard/model_instance_create_request.go
- sdk/standard/api_network_security_group.go
- sdk/standard/model_machine_health_issue.go
- sdk/standard/model_ssh_key_update_request.go
- sdk/standard/model_site_status.go
- sdk/standard/model_machine_instance_type.go
- sdk/standard/model_instance_type.go
- sdk/standard/api_ip_block.go
- sdk/standard/model_allocation_update_request.go
- sdk/standard/model_allocation.go
- sdk/standard/api_ssh_key_group.go
- sdk/standard/api_ssh_key.go
- api/pkg/api/model/subnet_test.go
- sdk/standard/model_instance.go
- sdk/standard/model_dpu_extension_service_observability_prometheus.go
- sdk/standard/api_rack.go
- sdk/standard/model_ip_block_update_request.go
- sdk/standard/api_nv_link_logical_partition.go
- sdk/standard/model_ssh_key.go
- sdk/standard/model_dpu_extension_service_deployment.go
- sdk/standard/model_nv_link_interface.go
- sdk/standard/model_operating_system_create_request.go
- sdk/standard/model_instance_type_create_request.go
- sdk/standard/model_batch_bring_up_rack_request.go
- sdk/standard/model_network_security_group_update_request.go
- sdk/standard/model_network_security_group_status.go
- sdk/standard/model_sku_tpm.go
- sdk/standard/model_network_security_group_rule.go
- sdk/standard/model_infini_band_interface_create_request.go
- sdk/standard/api_tray.go
- sdk/standard/model_dpu_extension_service_deployment_request.go
- sdk/standard/model_tenant.go
- sdk/standard/model_dpu_extension_service_version_info.go
- sdk/standard/model_site_machine_stats_by_status_and_health.go
- sdk/standard/model_interface.go
- sdk/standard/model_site_create_request.go
- sdk/standard/model_ip_block.go
- sdk/standard/model_rack_task.go
- sdk/standard/model_metadata.go
- sdk/standard/api_user.go
- sdk/standard/model_site_machine_stats_by_status.go
- sdk/standard/api_subnet.go
- sdk/standard/model_ssh_key_group_create_request.go
- sdk/standard/model_sku_ethernet_device.go
- sdk/standard/model_machine_instance_type_create_request.go
- sdk/standard/model_machine_health_probe_alert.go
- sdk/standard/model_carbide_api_error.go
- sdk/standard/model_subnet_update_request.go
- sdk/standard/model_tenant_capabilities.go
- sdk/standard/model_machine_health.go
- sdk/standard/model_ssh_key_group_status.go
- sdk/standard/model_ssh_key_group.go
- sdk/standard/model_tenant_stats.go
- sdk/standard/model_infini_band_interface.go
- sdk/standard/model_site_machine_stats_by_allocation.go
- sdk/standard/model_machine_dmi_data.go
- sdk/standard/model_machine_summary.go
- sdk/standard/model_network_security_group_propagation_status.go
- sdk/standard/model_deprecation.go
- sdk/standard/model_site_contact.go
- sdk/standard/model_ssh_key_group_site_association.go
- sdk/standard/model_allocation_constraint_create_request.go
- sdk/standard/model_ssh_key_create_request.go
- sdk/standard/utils.go
- sdk/standard/api_machine.go
- sdk/standard/model_sku_components.go
- sdk/standard/api_operating_system.go
- sdk/standard/model_sku_memory.go
- sdk/standard/model_ip_block_summary.go
- sdk/standard/model_vpc_prefix_create_request.go
- sdk/standard/api_expected_power_shelf.go
- sdk/standard/model_update_power_state_response.go
- sdk/standard/model_machine_status_breakdown.go
- sdk/standard/model_machine_gpu_info.go
- sdk/standard/model_machine_capability.go
- sdk/standard/model_machine_instance_type_stats.go
- sdk/standard/model_machine_health_probe_success.go
- sdk/standard/model_subnet_create_request.go
- sdk/standard/model_vpc.go
- sdk/standard/model_machine_instance_type_summary.go
- sdk/standard/model_vpc_count_by_status.go
- sdk/standard/api_vpc.go
- sdk/standard/model_infini_band_interface_status.go
- sdk/standard/model_dpu_extension_service_credentials.go
- sdk/standard/model_batch_rack_firmware_update_request.go
- sdk/standard/model_machine_infini_band_interface.go
- sdk/standard/model_nv_link_logical_partition.go
- sdk/standard/model_allocation_create_request.go
- sdk/standard/model_operating_system_site_association.go
- sdk/standard/model_vpc_peering_status.go
- sdk/standard/model_network_security_group_create_request.go
- sdk/standard/model_rack_validation_result.go
- sdk/standard/model_tray_position.go
- sdk/standard/model_machine_count_by_status.go
- sdk/standard/model_expected_machine_update_request.go
- sdk/standard/model_rack_location.go
- sdk/standard/model_ip_block_status.go
- sdk/standard/model_dpu_extension_service_observability_logging.go
- sdk/standard/model_instance_type_status.go
- sdk/standard/api_metadata.go
- sdk/standard/model_vpc_status.go
- sdk/standard/model_sku_gpu.go
- sdk/standard/api_dpu_extension_service.go
- sdk/standard/model_instance_type_update_request.go
- sdk/standard/model_instance_type_allocation_stats.go
- sdk/standard/model_expected_machine_create_request.go
- sdk/standard/model_instance_count_by_status.go
- sdk/standard/model_site.go
- sdk/standard/model_machine_bmc_info.go
- sdk/standard/model_nv_link_logical_partition_create_request.go
- sdk/standard/model_field_diff.go
- sdk/standard/model_dpu_extension_service_create_request.go
- sdk/standard/model_tenant_account_status.go
- sdk/standard/api_expected_machine.go
- sdk/standard/model_sku.go
- sdk/standard/model_tray_filter.go
- sdk/standard/model_machine_interface.go
- sdk/standard/model_allocation_constraint.go
- sdk/standard/model_interface_create_request.go
- sdk/standard/configuration.go
- sdk/standard/model_site_machine_stats_by_health.go
- sdk/standard/model_audit_entry.go
- sdk/standard/model_vpc_peering.go
- sdk/standard/model_machine.go
- sdk/standard/model_subnet_count_by_status.go
- sdk/standard/model_tray.go
- sdk/standard/api_instance.go
- sdk/standard/model_machine_metadata.go
- sdk/standard/model_sku_storage.go
- sdk/standard/api_audit.go
- sdk/standard/model_expected_machine.go
- sdk/standard/model_ip_block_create_request.go
- sdk/standard/model_ip_block_usage_stats.go
- sdk/standard/model_expected_power_shelf_create_request.go
- sdk/standard/model_tenant_account.go
- sdk/standard/api_instance_type.go
- sdk/standard/model_site_summary.go
- sdk/standard/model_rack_component.go
- sdk/standard/api_tenant_account.go
- sdk/standard/model_dpu_extension_service.go
- sdk/standard/model_machine_status.go
- sdk/standard/model_infini_band_partition_create_request.go
- sdk/standard/model_operating_system_update_request.go
- sdk/standard/api_expected_switch.go
- sdk/standard/model_dpu_extension_service_observability.go
- sdk/standard/model_site_location.go
- sdk/standard/model_expected_power_shelf.go
- sdk/standard/model_instance_update_request.go
- sdk/standard/model_ssh_key_group_update_request.go
- sdk/standard/model_subnet.go
- sdk/standard/model_tenant_account_count_by_status.go
- sdk/standard/model_batch_tray_firmware_update_request.go
- sdk/standard/model_network_security_group_propagation_details.go
- sdk/standard/model_vpc_prefix.go
- sdk/standard/client.go
- sdk/standard/model_infrastructure_provider_stats.go
- sdk/standard/model_expected_power_shelf_update_request.go
- sdk/standard/api_site.go
- sdk/standard/model_machine_update_request.go
- sdk/standard/model_vpc_create_request.go
- sdk/standard/model_expected_switch.go
- sdk/standard/model_batch_update_tray_power_state_request.go
- sdk/standard/model_expected_switch_create_request.go
- sdk/standard/model_batch_instance_create_request.go
- sdk/standard/model_nv_link_interface_create_request.go
- sdk/standard/model_vpc_peering_create_request.go
- sdk/standard/api_infini_band_partition.go
- sdk/standard/model_expected_switch_update_request.go
- sdk/standard/model_vpc_update_request.go
- sdk/standard/api_allocation.go
- sdk/standard/api_tenant.go
- sdk/standard/model_allocation_status.go
- sdk/standard/model_status_detail.go
- openapi/spec.yaml
- api/pkg/api/handler/subnet_test.go
🚧 Files skipped from review as they are similar to previous changes (15)
- sdk/standard/model_nv_link_logical_partition_status.go
- sdk/standard/model_nv_link_interface_status.go
- sdk/standard/response.go
- sdk/standard/model_infini_band_partition.go
- sdk/standard/model_instance_delete_request.go
- sdk/standard/model_operating_system.go
- sdk/standard/model_user.go
- sdk/standard/model_network_security_group.go
- api/pkg/api/model/subnet.go
- api/pkg/api/model/vpcprefix_test.go
- db/pkg/db/ipam/ipam.go
- sdk/standard/model_site_update_request.go
- api/pkg/api/handler/vpcprefix_test.go
- api/pkg/api/handler/subnet.go
- db/pkg/db/ipam/ipam_test.go
8493694 to
fece8da
Compare
|
@hwadekar-nv I don't think we can use IPAM to get usage stats for Subnets or VPC Prefixes. This is because they get used only when Instances are created and we don't record Instance IP usage in IPAM, that's decided by Core. The IPAM usage stats will not give back any meaningful information. We have to look into Instance count and Interface count to understand how many IPs have been used and how much IP space is left. We can work with @bcavnvidia to find how much IP space each Interface uses for Subnets and for VPC Prefixes. |
There was a problem hiding this comment.
Please include an example of a VPC Prefix that includes usageStats, but be mindful to not accidentally imply that this value can also be included in the return value from a create or update call
|
Got it, also IPAM is now configurable too so not always be available, Thanks @thossain-nv, will sync with @bcavnvidia for this. |
cd8b819 to
2619daf
Compare
|
|
||
| // ParseIncludeUsageStats reads includeUsageStats from the request; when true, clones relations and appends relationForStats | ||
| // if absent (Subnet: IPv4Block; VPC prefix: IPBlock). | ||
| func ParseIncludeUsageStats(c echo.Context, relations []string, relationForStats string) (includeUsageStats bool, augmented []string, err error) { |
There was a problem hiding this comment.
Usage stats and IncludeRelation are not related. Grouping them in a function does not seem intuitive. Let's leave these in the respective handlers.
Description
Type of Change
Services Affected
Related Issues (Optional)
Breaking Changes
Testing
Additional Notes