diff --git a/go.mod b/go.mod index dcd78eef..b9d0e302 100644 --- a/go.mod +++ b/go.mod @@ -14,14 +14,14 @@ require ( github.com/googleapis/gax-go/v2 v2.15.0 github.com/hashicorp/golang-lru v1.0.2 github.com/mitchellh/mapstructure v1.5.0 - github.com/nebius/gosdk v0.0.0-20250925083101-fd7444ff5a96 + github.com/nebius/gosdk v0.2.0 github.com/oklog/run v1.1.0 github.com/oracle/oci-go-sdk/v65 v65.101.0 github.com/prometheus/client_golang v1.20.5 github.com/stretchr/testify v1.11.1 google.golang.org/api v0.247.0 google.golang.org/grpc v1.75.1 - google.golang.org/protobuf v1.36.9 + google.golang.org/protobuf v1.36.11 gopkg.in/yaml.v3 v3.0.1 k8s.io/api v0.34.0 k8s.io/apimachinery v0.34.0 @@ -31,7 +31,7 @@ require ( ) require ( - buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.9-20250912141014-52f32327d4b0.1 // indirect + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1 // indirect cloud.google.com/go/auth v0.16.4 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.18 // indirect diff --git a/go.sum b/go.sum index fa1fcbd8..ab187bf5 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.9-20250912141014-52f32327d4b0.1 h1:DQLS/rRxLHuugVzjJU5AvOwD57pdFl9he/0O7e5P294= buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.9-20250912141014-52f32327d4b0.1/go.mod h1:aY3zbkNan5F+cGm9lITDP6oxJIwu0dn9KjJuJjWaHkg= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1 h1:PMmTMyvHScV9Mn8wc6ASge9uRcHy0jtqPd+fM35LmsQ= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM= cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= cloud.google.com/go/auth v0.16.4 h1:fXOAIQmkApVvcIn7Pc2+5J8QTMVbUGLscnSVNl11su8= @@ -146,6 +148,8 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nebius/gosdk v0.0.0-20250925083101-fd7444ff5a96 h1:uOgjQFTmOodcs56jT5MauE0b0MW0ugwADJS7ck679H0= github.com/nebius/gosdk v0.0.0-20250925083101-fd7444ff5a96/go.mod h1:eVbm4Qc4GPzBn3EL4rLvy1WS9zqJDw+giksOA2NZERY= +github.com/nebius/gosdk v0.2.0 h1:Z/TzCX8dIl/z3iGTFdhB64Eyhu6k0HigNhQJ/PjgX/A= +github.com/nebius/gosdk v0.2.0/go.mod h1:GPWYtdzMcVuptJEUPi5eQIUoApK5hT3K1MF9VlwJb5U= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= @@ -327,6 +331,8 @@ google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/providers/nebius/provider.go b/pkg/providers/nebius/provider.go index 0f59382b..843d55e7 100644 --- a/pkg/providers/nebius/provider.go +++ b/pkg/providers/nebius/provider.go @@ -10,6 +10,7 @@ import ( "fmt" "net/http" "os" + "strings" "github.com/nebius/gosdk" "github.com/nebius/gosdk/auth" @@ -18,6 +19,7 @@ import ( "k8s.io/klog/v2" "github.com/NVIDIA/topograph/internal/httperr" + "github.com/NVIDIA/topograph/internal/version" "github.com/NVIDIA/topograph/pkg/providers" "github.com/NVIDIA/topograph/pkg/topology" ) @@ -32,7 +34,8 @@ const ( authTokenPath = "/mnt/cloud-metadata/token" authTokenEnvVar = "IAM_TOKEN" - defaultPageSize int = 200 + defaultPageSize int = 200 + userAgentProduct string = "nvidia-topograph" ) type Client interface { @@ -146,7 +149,7 @@ func getSDK(ctx context.Context, creds map[string]any) (*gosdk.SDK, *httperr.Err return nil, httpErr } - sdk, err := gosdk.New(ctx, opt) + sdk, err := gosdk.New(ctx, opt, gosdk.WithUserAgentPrefix(getUserAgentPrefix(version.Version))) if err != nil { return nil, httperr.NewError(http.StatusUnauthorized, fmt.Sprintf("failed to create gosdk: %v", err)) } @@ -154,6 +157,13 @@ func getSDK(ctx context.Context, creds map[string]any) (*gosdk.SDK, *httperr.Err return sdk, nil } +func getUserAgentPrefix(versionValue string) string { + if strings.TrimSpace(versionValue) == "" { + return userAgentProduct + } + return userAgentProduct + "/" + versionValue +} + func getPageSize(sz *int) int { if sz == nil { return defaultPageSize diff --git a/pkg/providers/nebius/provider_test.go b/pkg/providers/nebius/provider_test.go index c598ae00..7e9c9329 100644 --- a/pkg/providers/nebius/provider_test.go +++ b/pkg/providers/nebius/provider_test.go @@ -70,3 +70,33 @@ func TestGetAuthOption(t *testing.T) { }) } } + +func TestGetUserAgentPrefix(t *testing.T) { + testCases := []struct { + name string + version string + want string + }{ + { + name: "empty version", + version: "", + want: userAgentProduct, + }, + { + name: "whitespace version", + version: " ", + want: userAgentProduct, + }, + { + name: "non-empty version", + version: "main", + want: "nvidia-topograph/main", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + require.Equal(t, tc.want, getUserAgentPrefix(tc.version)) + }) + } +}