Skip to content

Commit 33de8c0

Browse files
authored
Merge pull request #29738 from graham-rp/UX-838/local-gbac
[UX-838] Add rpk support for local gbac
2 parents 4c66da7 + 3450320 commit 33de8c0

22 files changed

Lines changed: 778 additions & 100 deletions

File tree

buf.gen.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: v2
22
managed:
33
enabled: false
44
inputs:
5-
- module: buf.build/redpandadata/core:92d267893f89
5+
- module: buf.build/redpandadata/core:ddc363cdd034
66
paths:
77
- redpanda/core/admin/v2/shadow_link.proto
88
- redpanda/core/common/v1/acl.proto

src/go/rpk/go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
buf.build/gen/go/redpandadata/cloud/connectrpc/go v1.19.1-20251208213618-d95eb1f5bf36.2
1111
buf.build/gen/go/redpandadata/cloud/protocolbuffers/go v1.36.11-20260206121607-b7882624f6ea.1
1212
buf.build/gen/go/redpandadata/common/protocolbuffers/go v1.36.11-20251216164002-601698cfe71d.1
13-
buf.build/gen/go/redpandadata/core/protocolbuffers/go v1.36.11-20260219184720-92d267893f89.1
13+
buf.build/gen/go/redpandadata/core/protocolbuffers/go v1.36.11-20260311180302-ddc363cdd034.1
1414
buf.build/gen/go/redpandadata/dataplane/connectrpc/go v1.19.1-20260219182640-53f7e728e222.2
1515
buf.build/gen/go/redpandadata/dataplane/protocolbuffers/go v1.36.11-20260219182640-53f7e728e222.1
1616
buf.build/gen/go/redpandadata/gatekeeper/connectrpc/go v1.19.1-20251022210437-a5dd600d04b6.2
@@ -50,7 +50,7 @@ require (
5050
github.com/prometheus/client_model v0.6.2
5151
github.com/prometheus/common v0.65.0
5252
github.com/redpanda-data/common-go/proto v0.0.0-20260223115805-73fb9bd9c2c0
53-
github.com/redpanda-data/common-go/rpadmin v0.2.2
53+
github.com/redpanda-data/common-go/rpadmin v0.2.4
5454
github.com/redpanda-data/common-go/rpsr v0.1.3
5555
github.com/redpanda-data/protoc-gen-go-mcp v0.0.0-20250930092048-a98b94b5957a
5656
github.com/rs/xid v1.6.0
@@ -76,8 +76,8 @@ require (
7676
golang.org/x/sync v0.19.0
7777
golang.org/x/sys v0.41.0
7878
golang.org/x/term v0.40.0
79-
google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d
80-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d
79+
google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c
80+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171
8181
google.golang.org/protobuf v1.36.11
8282
gopkg.in/yaml.v2 v2.4.0
8383
gopkg.in/yaml.v3 v3.0.1
@@ -90,7 +90,7 @@ require (
9090
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20260209202127-80ab13bee0bf.1 // indirect
9191
buf.build/gen/go/grpc-ecosystem/grpc-gateway/protocolbuffers/go v1.36.11-20260102203250-6467306b4f62.1 // indirect
9292
buf.build/gen/go/redpandadata/ai-gateway/protocolbuffers/go v1.36.11-20260203101113-1c7702ddb57a.1 // indirect
93-
buf.build/gen/go/redpandadata/core/connectrpc/go v1.19.1-20260130022012-03b783b62796.2 // indirect
93+
buf.build/gen/go/redpandadata/core/connectrpc/go v1.19.1-20260311180302-ddc363cdd034.2 // indirect
9494
buf.build/gen/go/redpandadata/otel/protocolbuffers/go v1.36.11-20251216164002-58c749b888d8.1 // indirect
9595
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
9696
github.com/BurntSushi/toml v1.1.0 // indirect
@@ -166,12 +166,12 @@ require (
166166
golang.org/x/crypto v0.48.0 // indirect
167167
golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d // indirect
168168
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
169-
golang.org/x/mod v0.32.0 // indirect
169+
golang.org/x/mod v0.33.0 // indirect
170170
golang.org/x/net v0.50.0 // indirect
171171
golang.org/x/oauth2 v0.34.0 // indirect
172172
golang.org/x/text v0.34.0 // indirect
173173
golang.org/x/time v0.9.0 // indirect
174-
golang.org/x/tools v0.41.0 // indirect
174+
golang.org/x/tools v0.42.0 // indirect
175175
google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d // indirect
176176
google.golang.org/grpc v1.79.1 // indirect
177177
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect

src/go/rpk/go.sum

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ buf.build/gen/go/redpandadata/cloud/protocolbuffers/go v1.36.11-20260206121607-b
1212
buf.build/gen/go/redpandadata/cloud/protocolbuffers/go v1.36.11-20260206121607-b7882624f6ea.1/go.mod h1:j1RqrOUwJtvY22i3Bikxc/i3zY+K0oqCiduDNurlQSI=
1313
buf.build/gen/go/redpandadata/common/protocolbuffers/go v1.36.11-20251216164002-601698cfe71d.1 h1:0KH3IndUZDFYFcYdcBa+bZziomFsBzlksAzTbmd5QQY=
1414
buf.build/gen/go/redpandadata/common/protocolbuffers/go v1.36.11-20251216164002-601698cfe71d.1/go.mod h1:3w7EzexwlL6PIFGbbeKZ0yHfUlAmI0aBVzF/QoFb8Cg=
15-
buf.build/gen/go/redpandadata/core/connectrpc/go v1.19.1-20260130022012-03b783b62796.2 h1:8W4Lx6S4/zIJ+WjE/8U3Sc2dFCtwfkKTfDQLEAQUj5Y=
16-
buf.build/gen/go/redpandadata/core/connectrpc/go v1.19.1-20260130022012-03b783b62796.2/go.mod h1:Mg9CvFsHr2sAxi5mEUL7O5obUSJZSZ8drT8M7KKvfIs=
17-
buf.build/gen/go/redpandadata/core/protocolbuffers/go v1.36.11-20260219184720-92d267893f89.1 h1:eOjDnUfezsTEC20OQDXH4OQ7IXWcQ7+dgT1e+1ABfU4=
18-
buf.build/gen/go/redpandadata/core/protocolbuffers/go v1.36.11-20260219184720-92d267893f89.1/go.mod h1:5sjUVquVwNxt3Q/EhE/UW0BBJ5sgPiaVTw8//wxRULI=
15+
buf.build/gen/go/redpandadata/core/connectrpc/go v1.19.1-20260311180302-ddc363cdd034.2 h1:wjE7Rl3oW6FF93X1SzI/YxYsux6CMTXXJ11FOPSjDl4=
16+
buf.build/gen/go/redpandadata/core/connectrpc/go v1.19.1-20260311180302-ddc363cdd034.2/go.mod h1:M109m+mNXfRK9JG/HOHFiZAuKfLTA5wxhjPBezx4YkY=
17+
buf.build/gen/go/redpandadata/core/protocolbuffers/go v1.36.11-20260311180302-ddc363cdd034.1 h1:Axg92VA0nfPGjLCTfdHeEmkyji7mDCC6Phiqhx+fgTA=
18+
buf.build/gen/go/redpandadata/core/protocolbuffers/go v1.36.11-20260311180302-ddc363cdd034.1/go.mod h1:5sjUVquVwNxt3Q/EhE/UW0BBJ5sgPiaVTw8//wxRULI=
1919
buf.build/gen/go/redpandadata/dataplane/connectrpc/go v1.19.1-20260219182640-53f7e728e222.2 h1:Hj353s451iVv60T9YT48/Yi9f2iPaO4uSdaWGg9dByM=
2020
buf.build/gen/go/redpandadata/dataplane/connectrpc/go v1.19.1-20260219182640-53f7e728e222.2/go.mod h1:xNGvrBFO5PqVurseNcCgYIRAqM//KWZ+fTUf5HE6c50=
2121
buf.build/gen/go/redpandadata/dataplane/protocolbuffers/go v1.36.11-20260219182640-53f7e728e222.1 h1:KPHY0S52U3yqNVAwqYz5GjWILqPpsBL+XN2NIyddiT8=
@@ -102,8 +102,8 @@ github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
102102
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
103103
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
104104
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
105-
github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7DlmewI=
106-
github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk=
105+
github.com/foxcpp/go-mockdns v1.2.0 h1:omK3OrHRD1IWJz1FuFBCFquhXslXoF17OvBS6JPzZF0=
106+
github.com/foxcpp/go-mockdns v1.2.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk=
107107
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
108108
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
109109
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
@@ -213,8 +213,8 @@ github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6T
213213
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
214214
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
215215
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
216-
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
217-
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
216+
github.com/miekg/dns v1.1.72 h1:vhmr+TF2A3tuoGNkLDFK9zi36F2LS+hKTRW0Uf8kbzI=
217+
github.com/miekg/dns v1.1.72/go.mod h1:+EuEPhdHOsfk6Wk5TT2CzssZdqkmFhf8r+aVyDEToIs=
218218
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
219219
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
220220
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
@@ -264,8 +264,8 @@ github.com/redpanda-data/common-go/net v0.1.0 h1:JnJioRJuL961r1QXiJQ1tW9+yEaJfu8
264264
github.com/redpanda-data/common-go/net v0.1.0/go.mod h1:iOdNkjxM7a1T8F3cYHTaKIPFCHzzp/ia6TN+Z+7Tt5w=
265265
github.com/redpanda-data/common-go/proto v0.0.0-20260223115805-73fb9bd9c2c0 h1:HgdM3npLEzqKyrzni05JwFb9B/Yd7T7hdFYgaUY7d38=
266266
github.com/redpanda-data/common-go/proto v0.0.0-20260223115805-73fb9bd9c2c0/go.mod h1:4TOyhdEvR/hlk0RjHXzmO0hYmWBpGGI1qiFPNv211O4=
267-
github.com/redpanda-data/common-go/rpadmin v0.2.2 h1:xD31YJBkUs9Z/KkZUIkVRHKk/EQ6MrPAvgiFUVcFFu0=
268-
github.com/redpanda-data/common-go/rpadmin v0.2.2/go.mod h1:qmu76v7RRKgEXLS3UXxZ8KDpObtSNq6RinOIejJNWzw=
267+
github.com/redpanda-data/common-go/rpadmin v0.2.4 h1:XM7kfhKokWeLATX4dnLXczjd4sxN2AcJll/KRvE15iA=
268+
github.com/redpanda-data/common-go/rpadmin v0.2.4/go.mod h1:uOAY10WXPtcDPU0aUdpkqHR+b1BqUvRhlvMf0vha73A=
269269
github.com/redpanda-data/common-go/rpsr v0.1.3 h1:mcjp7MeJylONI0H4MlrUEPEVOZpPNQGzWqcdd1QIAv4=
270270
github.com/redpanda-data/common-go/rpsr v0.1.3/go.mod h1:2j2416onosg5FKaKz52NooRE+q/9EJqQn0kyTcTXWHc=
271271
github.com/redpanda-data/go-avro/v2 v2.0.0-20240405204525-77b1144dc525 h1:vskZrV6q8W8flL0Ud23AJUYAd8ZgTadO45+loFnG2G0=
@@ -399,8 +399,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
399399
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
400400
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
401401
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
402-
golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c=
403-
golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU=
402+
golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8=
403+
golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w=
404404
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
405405
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
406406
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -451,8 +451,8 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK
451451
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
452452
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
453453
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
454-
golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc=
455-
golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg=
454+
golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k=
455+
golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0=
456456
golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
457457
golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
458458
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -463,10 +463,10 @@ gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
463463
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
464464
google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d h1:vsOm753cOAMkt76efriTCDKjpCbK18XGHMJHo0JUKhc=
465465
google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:0oz9d7g9QLSdv9/lgbIjowW1JoxMbxmBVNe8i6tORJI=
466-
google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d h1:EocjzKLywydp5uZ5tJ79iP6Q0UjDnyiHkGRWxuPBP8s=
467-
google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:48U2I+QQUYhsFrg2SY6r+nJzeOtjey7j//WBESw+qyQ=
468-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d h1:t/LOSXPJ9R0B6fnZNyALBRfZBH0Uy0gT+uR+SJ6syqQ=
469-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
466+
google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c h1:OyQPd6I3pN/9gDxz6L13kYGJgqkpdrAohJRBeXyxlgI=
467+
google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c/go.mod h1:X2gu9Qwng7Nn009s/r3RUxqkzQNqOrAy79bluY7ojIg=
468+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ=
469+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
470470
google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY=
471471
google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
472472
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=

src/go/rpk/pkg/adminapi/BUILD

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,19 @@ load("@rules_go//go:def.bzl", "go_library", "go_test")
22

33
go_library(
44
name = "adminapi",
5-
srcs = ["admin.go"],
5+
srcs = [
6+
"admin.go",
7+
"version.go",
8+
],
69
importpath = "github.com/redpanda-data/redpanda/src/go/rpk/pkg/adminapi",
710
visibility = ["//visibility:public"],
811
deps = [
912
"//src/go/rpk/pkg/config",
1013
"//src/go/rpk/pkg/oauth/authtoken",
1114
"//src/go/rpk/pkg/oauth/providers/auth0",
15+
"//src/go/rpk/pkg/redpanda",
16+
"@build_buf_gen_go_redpandadata_core_protocolbuffers_go//redpanda/core/admin/v2:admin",
17+
"@com_connectrpc_connect//:connect",
1218
"@com_github_kr_text//:text",
1319
"@com_github_moby_term//:term",
1420
"@com_github_redpanda_data_common_go_rpadmin//:rpadmin",

src/go/rpk/pkg/adminapi/version.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright 2026 Redpanda Data, Inc.
2+
//
3+
// Use of this software is governed by the Business Source License
4+
// included in the file licenses/BSL.md
5+
//
6+
// As of the Change Date specified in that file, in accordance with
7+
// the Business Source License, use of this software will be governed
8+
// by the Apache License, Version 2.0
9+
10+
package adminapi
11+
12+
import (
13+
"context"
14+
15+
adminv2 "buf.build/gen/go/redpandadata/core/protocolbuffers/go/redpanda/core/admin/v2"
16+
"connectrpc.com/connect"
17+
"github.com/redpanda-data/common-go/rpadmin"
18+
"github.com/redpanda-data/redpanda/src/go/rpk/pkg/redpanda"
19+
)
20+
21+
// HasMinimumVersion returns true if all brokers in the cluster are at least
22+
// the given version. Returns false on any error or if broker info is missing.
23+
func HasMinimumVersion(ctx context.Context, cl *rpadmin.AdminAPI, version redpanda.Version) bool {
24+
brokers, err := cl.BrokerService().ListBrokers(ctx, &connect.Request[adminv2.ListBrokersRequest]{})
25+
if err != nil || len(brokers.Msg.Brokers) == 0 {
26+
return false
27+
}
28+
for _, broker := range brokers.Msg.Brokers {
29+
if broker.BuildInfo == nil {
30+
return false
31+
}
32+
v, err := redpanda.VersionFromString(broker.BuildInfo.Version)
33+
if err != nil || !v.IsAtLeast(version) {
34+
return false
35+
}
36+
}
37+
return true
38+
}

src/go/rpk/pkg/cli/cluster/connections/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ go_library(
1818
"@build_buf_gen_go_redpandadata_core_protocolbuffers_go//redpanda/core/admin/v2:admin",
1919
"@com_connectrpc_connect//:connect",
2020
"@com_github_docker_go_units//:go-units",
21-
"@com_github_redpanda_data_common_go_rpadmin//:rpadmin",
2221
"@com_github_spf13_afero//:afero",
2322
"@com_github_spf13_cobra//:cobra",
2423
],

src/go/rpk/pkg/cli/cluster/connections/list.go

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ package connections
1212

1313
import (
1414
"bytes"
15-
"context"
1615
"errors"
1716
"fmt"
1817
"strings"
@@ -21,7 +20,6 @@ import (
2120
adminv2 "buf.build/gen/go/redpandadata/core/protocolbuffers/go/redpanda/core/admin/v2"
2221
"connectrpc.com/connect"
2322
"github.com/docker/go-units"
24-
"github.com/redpanda-data/common-go/rpadmin"
2523
"github.com/redpanda-data/redpanda/src/go/rpk/pkg/adminapi"
2624
"github.com/redpanda-data/redpanda/src/go/rpk/pkg/config"
2725
"github.com/redpanda-data/redpanda/src/go/rpk/pkg/out"
@@ -58,26 +56,6 @@ var tableHeaders = []string{
5856
"REQS/MIN",
5957
}
6058

61-
func isFeatureSupported(ctx context.Context, client *rpadmin.AdminAPI) bool {
62-
// Determine whether the broker version supports client connection monitoring
63-
brokers, err := client.BrokerService().ListBrokers(ctx, &connect.Request[adminv2.ListBrokersRequest]{})
64-
if err != nil || len(brokers.Msg.Brokers) == 0 {
65-
return false
66-
}
67-
68-
for _, broker := range brokers.Msg.Brokers {
69-
if broker.BuildInfo == nil {
70-
return false
71-
}
72-
version, err := redpanda.VersionFromString(broker.BuildInfo.Version)
73-
if err != nil || !version.IsAtLeast(minVersion) {
74-
return false
75-
}
76-
}
77-
78-
return true
79-
}
80-
8159
func getConnectionDuration(conn *adminv2.KafkaConnection) string {
8260
opened := conn.OpenTime.AsTime()
8361
closed := conn.CloseTime.AsTime()
@@ -242,7 +220,7 @@ List extended output for open connections in json format:
242220
out.MaybeDie(err, "unable to initialize admin client: %v", err)
243221

244222
// Check that we're at least at the minimum version
245-
if !isFeatureSupported(cmd.Context(), cl) {
223+
if !adminapi.HasMinimumVersion(cmd.Context(), cl, minVersion) {
246224
out.Die("rpk cluster connections list requires Redpanda version %s or later", minVersion.String())
247225
}
248226

src/go/rpk/pkg/cli/security/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ go_library(
77
visibility = ["//visibility:public"],
88
deps = [
99
"//src/go/rpk/pkg/cli/security/acl",
10+
"//src/go/rpk/pkg/cli/security/group",
1011
"//src/go/rpk/pkg/cli/security/role",
1112
"//src/go/rpk/pkg/cli/security/secret",
1213
"//src/go/rpk/pkg/cli/security/user",
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
load("@rules_go//go:def.bzl", "go_library", "go_test")
2+
3+
go_library(
4+
name = "group",
5+
srcs = [
6+
"assign.go",
7+
"describe.go",
8+
"group.go",
9+
"list.go",
10+
"unassign.go",
11+
],
12+
importpath = "github.com/redpanda-data/redpanda/src/go/rpk/pkg/cli/security/group",
13+
visibility = ["//visibility:public"],
14+
deps = [
15+
"//src/go/rpk/pkg/adminapi",
16+
"//src/go/rpk/pkg/config",
17+
"//src/go/rpk/pkg/out",
18+
"//src/go/rpk/pkg/redpanda",
19+
"@build_buf_gen_go_redpandadata_core_protocolbuffers_go//redpanda/core/admin/v2:admin",
20+
"@com_connectrpc_connect//:connect",
21+
"@com_github_spf13_afero//:afero",
22+
"@com_github_spf13_cobra//:cobra",
23+
],
24+
)
25+
26+
go_test(
27+
name = "group_test",
28+
srcs = ["group_test.go"],
29+
embed = [":group"],
30+
deps = [
31+
"@build_buf_gen_go_redpandadata_core_protocolbuffers_go//redpanda/core/admin/v2:admin",
32+
"@com_github_stretchr_testify//require",
33+
],
34+
)

0 commit comments

Comments
 (0)