Skip to content
This repository was archived by the owner on Dec 9, 2025. It is now read-only.

Commit a712c7e

Browse files
committed
WIP
Change-Id: I36b15721c543637a010fff9cd66d2e03c451f8d3
1 parent df7a210 commit a712c7e

File tree

5 files changed

+172
-47
lines changed

5 files changed

+172
-47
lines changed

go.mod

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@ module github.com/google/dranet
33
go 1.23.0
44

55
require (
6+
cloud.google.com/go/compute v1.34.0
67
cloud.google.com/go/compute/metadata v0.6.0
8+
cloud.google.com/go/container v1.42.2
79
github.com/Mellanox/rdmamap v1.1.0
810
github.com/containerd/nri v0.9.0
911
github.com/spf13/cobra v1.9.1
1012
github.com/vishvananda/netlink v1.3.0
1113
github.com/vishvananda/netns v0.0.5
1214
golang.org/x/sys v0.31.0
1315
golang.org/x/time v0.11.0
16+
google.golang.org/api v0.222.0
1417
k8s.io/api v0.32.2
1518
k8s.io/apimachinery v0.32.2
1619
k8s.io/client-go v0.32.2
@@ -23,12 +26,16 @@ require (
2326
)
2427

2528
require (
29+
cloud.google.com/go/auth v0.14.1 // indirect
30+
cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect
2631
github.com/containerd/log v0.1.0 // indirect
2732
github.com/containerd/ttrpc v1.2.7 // indirect
2833
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
2934
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
35+
github.com/felixge/httpsnoop v1.0.4 // indirect
3036
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
3137
github.com/go-logr/logr v1.4.2 // indirect
38+
github.com/go-logr/stdr v1.2.2 // indirect
3239
github.com/go-openapi/jsonpointer v0.21.0 // indirect
3340
github.com/go-openapi/jsonreference v0.21.0 // indirect
3441
github.com/go-openapi/swag v0.23.0 // indirect
@@ -37,7 +44,10 @@ require (
3744
github.com/google/gnostic-models v0.6.9 // indirect
3845
github.com/google/go-cmp v0.7.0 // indirect
3946
github.com/google/gofuzz v1.2.0 // indirect
47+
github.com/google/s2a-go v0.1.9 // indirect
4048
github.com/google/uuid v1.6.0 // indirect
49+
github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
50+
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
4151
github.com/inconshreveable/mousetrap v1.1.0 // indirect
4252
github.com/josharian/intern v1.0.0 // indirect
4353
github.com/json-iterator/go v1.1.12 // indirect
@@ -54,10 +64,20 @@ require (
5464
github.com/spf13/pflag v1.0.6 // indirect
5565
github.com/tetratelabs/wazero v1.9.0 // indirect
5666
github.com/x448/float16 v0.8.4 // indirect
67+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
68+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect
69+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect
70+
go.opentelemetry.io/otel v1.34.0 // indirect
71+
go.opentelemetry.io/otel/metric v1.34.0 // indirect
72+
go.opentelemetry.io/otel/trace v1.34.0 // indirect
73+
golang.org/x/crypto v0.36.0 // indirect
5774
golang.org/x/net v0.37.0 // indirect
5875
golang.org/x/oauth2 v0.28.0 // indirect
76+
golang.org/x/sync v0.12.0 // indirect
5977
golang.org/x/term v0.30.0 // indirect
6078
golang.org/x/text v0.23.0 // indirect
79+
google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 // indirect
80+
google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2 // indirect
6181
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb // indirect
6282
google.golang.org/grpc v1.71.0 // indirect
6383
google.golang.org/protobuf v1.36.5 // indirect

go.sum

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
1+
cloud.google.com/go v0.118.2 h1:bKXO7RXMFDkniAAvvuMrAPtQ/VHrs9e7J5UT3yrGdTY=
2+
cloud.google.com/go v0.118.2/go.mod h1:CFO4UPEPi8oV21xoezZCrd3d81K4fFkDTEJu4R8K+9M=
3+
cloud.google.com/go/auth v0.14.1 h1:AwoJbzUdxA/whv1qj3TLKwh3XX5sikny2fc40wUl+h0=
4+
cloud.google.com/go/auth v0.14.1/go.mod h1:4JHUxlGXisL0AW8kXPtUF6ztuOksyfUQNFjfsOCXkPM=
5+
cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M=
6+
cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc=
7+
cloud.google.com/go/compute v1.34.0 h1:+k/kmViu4TEi97NGaxAATYtpYBviOWJySPZ+ekA95kk=
8+
cloud.google.com/go/compute v1.34.0/go.mod h1:zWZwtLwZQyonEvIQBuIa0WvraMYK69J5eDCOw9VZU4g=
19
cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
210
cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
11+
cloud.google.com/go/container v1.42.2 h1:8ncSEBjkng6ucCICauaUGzBomoM2VyYzleAum1OFcow=
12+
cloud.google.com/go/container v1.42.2/go.mod h1:y71YW7uR5Ck+9Vsbst0AF2F3UMgqmsN4SP8JR9xEsR8=
313
github.com/Mellanox/rdmamap v1.1.0 h1:A/W1wAXw+6vm58f3VklrIylgV+eDJlPVIMaIKuxgUT4=
414
github.com/Mellanox/rdmamap v1.1.0/go.mod h1:fN+/V9lf10ABnDCwTaXRjeeWijLt2iVLETnK+sx/LY8=
515
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
@@ -15,8 +25,11 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
1525
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1626
github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
1727
github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
28+
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
29+
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
1830
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
1931
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
32+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
2033
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
2134
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
2235
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
@@ -43,8 +56,14 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
4356
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
4457
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
4558
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
59+
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
60+
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
4661
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
4762
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
63+
github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=
64+
github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
65+
github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q=
66+
github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
4867
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
4968
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
5069
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -81,8 +100,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI
81100
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
82101
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
83102
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
84-
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
85-
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
103+
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
104+
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
86105
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
87106
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
88107
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
@@ -93,8 +112,8 @@ github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
93112
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
94113
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
95114
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
96-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
97-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
115+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
116+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
98117
github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I=
99118
github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM=
100119
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
@@ -110,6 +129,10 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
110129
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
111130
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
112131
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
132+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 h1:PS8wXpbyaDJQ2VDHHncMe9Vct0Zn1fEjpsjrLxGJoSc=
133+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0/go.mod h1:HDBUsEjOuRC0EzKZ1bSaRGZWUBAzo+MhAcUUORSr4D0=
134+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU=
135+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q=
113136
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
114137
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
115138
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
@@ -123,6 +146,8 @@ go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h
123146
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
124147
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
125148
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
149+
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
150+
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
126151
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
127152
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
128153
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -136,6 +161,8 @@ golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT
136161
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
137162
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
138163
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
164+
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
165+
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
139166
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
140167
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
141168
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -163,6 +190,12 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
163190
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
164191
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
165192
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
193+
google.golang.org/api v0.222.0 h1:Aiewy7BKLCuq6cUCeOUrsAlzjXPqBkEeQ/iwGHVQa/4=
194+
google.golang.org/api v0.222.0/go.mod h1:efZia3nXpWELrwMlN5vyQrD4GmJN1Vw0x68Et3r+a9c=
195+
google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 h1:Pw6WnI9W/LIdRxqK7T6XGugGbHIRl5Q7q3BssH6xk4s=
196+
google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:qbZzneIOXSq+KFAFut9krLfRLZiFLzZL5u2t8SV83EE=
197+
google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2 h1:35ZFtrCgaAjF7AFAK0+lRSf+4AyYnWRbH7og13p7rZ4=
198+
google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2/go.mod h1:W9ynFDP/shebLB1Hl/ESTOap2jHd6pmLXPNZC7SVDbA=
166199
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4=
167200
google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
168201
google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg=

pkg/cloudprovider/gce/gce.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ import (
2121
"encoding/json"
2222
"time"
2323

24+
compute "cloud.google.com/go/compute/apiv1"
2425
"cloud.google.com/go/compute/metadata"
26+
container "cloud.google.com/go/container/apiv1"
2527

2628
"k8s.io/apimachinery/pkg/util/wait"
2729
"k8s.io/klog/v2"
@@ -30,16 +32,26 @@ import (
3032
)
3133

3234
var (
35+
// Populated by the command line
36+
ContainersClient *container.ClusterManagerClient // handle GKE Clusters
37+
NetworksClient *compute.NetworksClient // handle GCE Networks
38+
SubnetworksClient *compute.SubnetworksClient // handle GCE Subnets
39+
3340
// https://cloud.google.com/compute/docs/accelerator-optimized-machines#network-protocol
3441
// machine types have a one to one mapping to a network protocol in google cloud
3542
NetworkProtocolMap = map[string]string{
36-
"a3-highgpu-1g": "GPUDirect-TCPX",
37-
"a3-highgpu-2g": "GPUDirect-TCPX",
38-
"a3-highgpu-4g": "GPUDirect-TCPX",
39-
"a3-highgpu-8g": "GPUDirect-TCPX",
40-
"a3-edgegpu-8g": "GPUDirect-TCPX",
41-
"a3-megagpu-8g": "GPUDirect-TCPXO",
43+
"a3-highgpu-1g": "GPUDirect-TCPX", // 8 GPU 4 accelerator NICs
44+
"a3-highgpu-2g": "GPUDirect-TCPX", // "
45+
"a3-highgpu-4g": "GPUDirect-TCPX", // "
46+
"a3-highgpu-8g": "GPUDirect-TCPX", // "
47+
"a3-edgegpu-8g": "GPUDirect-TCPX", // "
48+
"a3-megagpu-8g": "GPUDirect-TCPXO", // 8 GPUs 8 NICs
49+
"a3-ultragpu-8g": "RDMA", // 8 GPUs 8 NICs
4250
}
51+
// Network Technology
52+
// GPUDirect-TCPX: one VPCs for GPU NICs, one subnet per VPC 8244MTU
53+
// GPUDirect-TCPXO: one VPCs for GPU NICs, one subnet per VPC 8244MTU
54+
// RDMA: one HPC VPC, one subnet per NIC, 8896MTU
4355
)
4456

4557
func GetInstance(ctx context.Context) (*cloudprovider.CloudInstance, error) {

pkg/dranetctl/gke/command.go

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,56 +17,60 @@ limitations under the License.
1717
package gke
1818

1919
import (
20+
"context"
21+
22+
"github.com/google/dranet/pkg/cloudprovider/gce"
2023
"github.com/spf13/cobra"
24+
25+
compute "cloud.google.com/go/compute/apiv1"
26+
container "cloud.google.com/go/container/apiv1"
27+
"google.golang.org/api/option"
2128
)
2229

2330
var GkeCmd = &cobra.Command{
2431
Use: "gke",
2532
Short: "Manage resources on Google Kubernetes Engine (GKE)",
2633
Long: `This command allows you to manage resources on GKE.`,
27-
}
34+
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
35+
// This function runs before any subcommand of gke
36+
authFile, err := cmd.Flags().GetString("auth-file")
37+
if err != nil {
38+
return err
39+
}
40+
ctx := context.Background()
2841

29-
// nodepoolCmd represents the nodepool command
30-
var nodepoolCmd = &cobra.Command{
31-
Use: "nodepool",
32-
Short: "Manage nodepools on GKE",
33-
Long: `Allows creating, validating, and managing nodepools on GKE.`,
34-
}
42+
opts := []option.ClientOption{}
43+
if authFile != "" {
44+
opts = append(opts, option.WithCredentialsFile(authFile))
45+
}
3546

36-
// ... (createnodepoolCmd and validatenodepoolCmd remain largely the same, but adapt the package)
37-
var createnodepoolCmd = &cobra.Command{
38-
Use: "create",
39-
Short: "Create a new nodepool",
40-
Run: func(cmd *cobra.Command, args []string) {
41-
// ... (rest of the code)
42-
},
43-
}
47+
containerClient, err := container.NewClusterManagerClient(ctx, opts...)
48+
if err != nil {
49+
return err
50+
}
4451

45-
var validatenodepoolCmd = &cobra.Command{
46-
Use: "validate",
47-
Short: "Validate an existing nodepool",
48-
Run: func(cmd *cobra.Command, args []string) {
49-
// ... (rest of the code)
52+
gce.ContainersClient = containerClient
53+
54+
networksClient, err := compute.NewNetworksClient(ctx, opts...)
55+
if err != nil {
56+
return err
57+
}
58+
59+
gce.NetworksClient = networksClient
60+
61+
subnetworksClient, err := compute.NewSubnetworksClient(ctx, opts...)
62+
if err != nil {
63+
return err
64+
}
65+
66+
gce.SubnetworksClient = subnetworksClient
67+
68+
return nil
5069
},
5170
}
5271

5372
func init() {
5473
GkeCmd.AddCommand(nodepoolCmd)
55-
56-
nodepoolCmd.AddCommand(createnodepoolCmd)
57-
nodepoolCmd.AddCommand(validatenodepoolCmd)
58-
59-
createnodepoolCmd.Flags().String("project", "", "GCP project ID")
60-
createnodepoolCmd.Flags().String("location", "", "GCP location (e.g., us-central1)")
61-
createnodepoolCmd.Flags().String("cluster", "", "GKE cluster name")
62-
createnodepoolCmd.Flags().String("nodepool", "", "Nodepool name")
63-
createnodepoolCmd.Flags().String("machine-type", "", "Machine type for nodes")
64-
createnodepoolCmd.Flags().Int64("node-count", 0, "Number of nodes")
65-
createnodepoolCmd.Flags().Bool("run-nccl", false, "Run nccl tests after dranet installation")
66-
67-
validatenodepoolCmd.Flags().String("project", "", "GCP project ID")
68-
validatenodepoolCmd.Flags().String("location", "", "GCP location (e.g., us-central1)")
69-
validatenodepoolCmd.Flags().String("cluster", "", "GKE cluster name")
70-
validatenodepoolCmd.Flags().String("nodepool", "", "Nodepool name")
74+
GkeCmd.PersistentFlags().String("auth-file", "", "Path to the Google Cloud service account JSON file")
7175

7276
}

pkg/dranetctl/gke/nodepool.go

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,60 @@ limitations under the License.
1616

1717
package gke
1818

19-
var Version = "0.1"
19+
import "github.com/spf13/cobra"
20+
21+
// nodepoolCmd represents the nodepool command
22+
var nodepoolCmd = &cobra.Command{
23+
Use: "nodepool",
24+
Short: "Manage nodepools on GKE",
25+
Long: `Allows creating, validating, and managing nodepools on GKE.`,
26+
}
27+
28+
// ... (createnodepoolCmd and validatenodepoolCmd remain largely the same, but adapt the package)
29+
var createnodepoolCmd = &cobra.Command{
30+
Use: "create",
31+
Short: "Create a new nodepool",
32+
Run: func(cmd *cobra.Command, args []string) {
33+
// ... (rest of the code)
34+
},
35+
}
36+
37+
var listnodepoolCmd = &cobra.Command{
38+
Use: "list",
39+
Short: "List any existing nodepool",
40+
Run: func(cmd *cobra.Command, args []string) {
41+
// ... (rest of the code)
42+
},
43+
}
44+
45+
var validatenodepoolCmd = &cobra.Command{
46+
Use: "validate",
47+
Short: "Validate an existing nodepool",
48+
Run: func(cmd *cobra.Command, args []string) {
49+
// ... (rest of the code)
50+
},
51+
}
52+
53+
func init() {
54+
55+
nodepoolCmd.AddCommand(createnodepoolCmd)
56+
nodepoolCmd.AddCommand(validatenodepoolCmd)
57+
58+
createnodepoolCmd.Flags().String("project", "", "GCP project ID")
59+
createnodepoolCmd.Flags().String("location", "", "GCP location (e.g., us-central1)")
60+
createnodepoolCmd.Flags().String("cluster", "", "GKE cluster name")
61+
createnodepoolCmd.Flags().String("nodepool", "", "Nodepool name")
62+
createnodepoolCmd.Flags().String("machine-type", "", "Machine type for nodes")
63+
createnodepoolCmd.Flags().Int64("node-count", 0, "Number of nodes")
64+
createnodepoolCmd.Flags().Bool("run-nccl", false, "Run nccl tests after dranet installation")
65+
66+
listnodepoolCmd.Flags().String("project", "", "GCP project ID")
67+
listnodepoolCmd.Flags().String("location", "", "GCP location (e.g., us-central1)")
68+
listnodepoolCmd.Flags().String("cluster", "", "GKE cluster name")
69+
70+
validatenodepoolCmd.Flags().String("project", "", "GCP project ID")
71+
validatenodepoolCmd.Flags().String("location", "", "GCP location (e.g., us-central1)")
72+
validatenodepoolCmd.Flags().String("cluster", "", "GKE cluster name")
73+
validatenodepoolCmd.Flags().String("nodepool", "", "Nodepool name")
74+
75+
}

0 commit comments

Comments
 (0)