Skip to content

Commit 10513ae

Browse files
authored
Add Gateway API ELB cleanup support for eksctl cluster deletion (#8664)
1 parent 5361834 commit 10513ae

17 files changed

Lines changed: 2248 additions & 117 deletions

File tree

go.mod

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ require (
8585
k8s.io/kops v1.33.1
8686
k8s.io/kubelet v0.35.0
8787
k8s.io/utils v0.0.0-20260108192941-914a6e750570
88+
sigs.k8s.io/gateway-api v1.4.1
8889
sigs.k8s.io/mdtoc v1.4.0
8990
sigs.k8s.io/yaml v1.6.0
9091
)
@@ -193,7 +194,7 @@ require (
193194
github.com/docker/distribution v2.8.3+incompatible // indirect
194195
github.com/docker/docker-credential-helpers v0.9.3 // indirect
195196
github.com/dustin/go-humanize v1.0.1 // indirect
196-
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
197+
github.com/emicklei/go-restful/v3 v3.13.0 // indirect
197198
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
198199
github.com/ettle/strcase v0.2.0 // indirect
199200
github.com/evanphx/json-patch v5.9.11+incompatible // indirect
@@ -212,9 +213,9 @@ require (
212213
github.com/go-ini/ini v1.67.0 // indirect
213214
github.com/go-logr/logr v1.4.3 // indirect
214215
github.com/go-logr/stdr v1.2.2 // indirect
215-
github.com/go-openapi/jsonpointer v0.21.0 // indirect
216+
github.com/go-openapi/jsonpointer v0.21.2 // indirect
216217
github.com/go-openapi/jsonreference v0.21.0 // indirect
217-
github.com/go-openapi/swag v0.23.0 // indirect
218+
github.com/go-openapi/swag v0.23.1 // indirect
218219
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
219220
github.com/go-toolsmith/astcast v1.1.0 // indirect
220221
github.com/go-toolsmith/astcopy v1.1.0 // indirect
@@ -346,7 +347,7 @@ require (
346347
github.com/prometheus/client_golang v1.23.2 // indirect
347348
github.com/prometheus/client_model v0.6.2 // indirect
348349
github.com/prometheus/common v0.66.1 // indirect
349-
github.com/prometheus/procfs v0.16.1 // indirect
350+
github.com/prometheus/procfs v0.17.0 // indirect
350351
github.com/quasilyte/go-ruleguard v0.4.5 // indirect
351352
github.com/quasilyte/go-ruleguard/dsl v0.3.23 // indirect
352353
github.com/quasilyte/gogrep v0.5.0 // indirect
@@ -430,8 +431,8 @@ require (
430431
golang.org/x/time v0.12.0 // indirect
431432
golang.org/x/tools v0.40.0 // indirect
432433
google.golang.org/api v0.239.0 // indirect
433-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c // indirect
434-
google.golang.org/grpc v1.75.0 // indirect
434+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 // indirect
435+
google.golang.org/grpc v1.75.1 // indirect
435436
google.golang.org/protobuf v1.36.10 // indirect
436437
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
437438
gopkg.in/inf.v0 v0.9.1 // indirect
@@ -441,7 +442,7 @@ require (
441442
honnef.co/go/tools v0.6.1 // indirect
442443
k8s.io/apiserver v0.35.0 // indirect
443444
k8s.io/component-base v0.35.0 // indirect
444-
k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f // indirect
445+
k8s.io/gengo/v2 v2.0.0-20250820003526-c297c0c1eb9d // indirect
445446
k8s.io/klog/v2 v2.130.1 // indirect
446447
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
447448
k8s.io/kubectl v0.34.0 // indirect

go.sum

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,9 @@ github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHz
313313
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
314314
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
315315
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
316-
github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
317316
github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
317+
github.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes=
318+
github.com/emicklei/go-restful/v3 v3.13.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
318319
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
319320
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
320321
github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q=
@@ -379,15 +380,17 @@ github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ4
379380
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
380381
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
381382
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
382-
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
383383
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
384+
github.com/go-openapi/jsonpointer v0.21.2 h1:AqQaNADVwq/VnkCmQg6ogE+M3FOsKTytwges0JdwVuA=
385+
github.com/go-openapi/jsonpointer v0.21.2/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk=
384386
github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
385387
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
386388
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
387389
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
388390
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
389-
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
390391
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
392+
github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU=
393+
github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0=
391394
github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI=
392395
github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow=
393396
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
@@ -695,8 +698,8 @@ github.com/mfridman/tparse v0.18.0 h1:wh6dzOKaIwkUGyKgOntDW4liXSo37qg5AXbIhkMV3v
695698
github.com/mfridman/tparse v0.18.0/go.mod h1:gEvqZTuCgEhPbYk/2lS3Kcxg1GmTxxU7kTC8DvP0i/A=
696699
github.com/mgechev/revive v1.12.0 h1:Q+/kkbbwerrVYPv9d9efaPGmAO/NsxwW/nE6ahpQaCU=
697700
github.com/mgechev/revive v1.12.0/go.mod h1:VXsY2LsTigk8XU9BpZauVLjVrhICMOV3k1lpB3CXrp8=
698-
github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ=
699-
github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ=
701+
github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA=
702+
github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
700703
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
701704
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
702705
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
@@ -851,8 +854,8 @@ github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNw
851854
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
852855
github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs=
853856
github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
854-
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
855-
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
857+
github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0=
858+
github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw=
856859
github.com/quasilyte/go-ruleguard v0.4.5 h1:AGY0tiOT5hJX9BTdx/xBdoCubQUAE2grkqY2lSwvZcA=
857860
github.com/quasilyte/go-ruleguard v0.4.5/go.mod h1:Vl05zJ538vcEEwu16V/Hdu7IYZWyKSwIy4c88Ro1kRE=
858861
github.com/quasilyte/go-ruleguard/dsl v0.3.23 h1:lxjt5B6ZCiBeeNO8/oQsegE6fLeCzuMRoVWSkXC4uvY=
@@ -1349,10 +1352,10 @@ google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuO
13491352
google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s=
13501353
google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU=
13511354
google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA=
1352-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c h1:qXWI/sQtv5UKboZ/zUk7h+mrf/lXORyI+n9DKDAusdg=
1353-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo=
1354-
google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
1355-
google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
1355+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 h1:pmJpJEvT846VzausCQ5d7KreSROcDqmO388w5YbnltA=
1356+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1/go.mod h1:GmFNa4BdJZ2a8G+wCe9Bg3wwThLrJun751XstdJt5Og=
1357+
google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
1358+
google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
13561359
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
13571360
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
13581361
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -1416,8 +1419,9 @@ k8s.io/code-generator v0.34.1 h1:WpphT26E+j7tEgIUfFr5WfbJrktCGzB3JoJH9149xYc=
14161419
k8s.io/code-generator v0.34.1/go.mod h1:DeWjekbDnJWRwpw3s0Jat87c+e0TgkxoR4ar608yqvg=
14171420
k8s.io/component-base v0.34.1 h1:v7xFgG+ONhytZNFpIz5/kecwD+sUhVE6HU7qQUiRM4A=
14181421
k8s.io/component-base v0.34.1/go.mod h1:mknCpLlTSKHzAQJJnnHVKqjxR7gBeHRv0rPXA7gdtQ0=
1419-
k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f h1:SLb+kxmzfA87x4E4brQzB33VBbT2+x7Zq9ROIHmGn9Q=
14201422
k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
1423+
k8s.io/gengo/v2 v2.0.0-20250820003526-c297c0c1eb9d h1:qUrYOinhdAUL0xxhA4gPqogPBaS9nIq2l2kTb6pmeB0=
1424+
k8s.io/gengo/v2 v2.0.0-20250820003526-c297c0c1eb9d/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
14211425
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
14221426
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
14231427
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
@@ -1443,6 +1447,8 @@ oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc=
14431447
oras.land/oras-go/v2 v2.6.0/go.mod h1:magiQDfG6H1O9APp+rOsvCPcW1GD2MM7vgnKY0Y+u1o=
14441448
sigs.k8s.io/controller-runtime v0.23.1 h1:TjJSM80Nf43Mg21+RCy3J70aj/W6KyvDtOlpKf+PupE=
14451449
sigs.k8s.io/controller-runtime v0.23.1/go.mod h1:B6COOxKptp+YaUT5q4l6LqUJTRpizbgf9KSRNdQGns0=
1450+
sigs.k8s.io/gateway-api v1.4.1 h1:NPxFutNkKNa8UfLd2CMlEuhIPMQgDQ6DXNKG9sHbJU8=
1451+
sigs.k8s.io/gateway-api v1.4.1/go.mod h1:AR5RSqciWP98OPckEjOjh2XJhAe2Na4LHyXD2FUY7Qk=
14461452
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
14471453
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
14481454
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=

pkg/actions/cluster/delete.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
ekstypes "github.com/aws/aws-sdk-go-v2/service/eks/types"
1414

1515
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
16+
"k8s.io/client-go/rest"
1617

1718
"github.com/kris-nova/logger"
1819

@@ -59,8 +60,20 @@ func deleteSharedResources(ctx context.Context, cfg *api.ClusterConfig, ctl *eks
5960

6061
cfg.Metadata.Version = *ctl.Status.ClusterInfo.Cluster.Version
6162

62-
logger.Info("cleaning up AWS load balancers created by Kubernetes objects of Kind Service or Ingress")
63-
if err := elb.Cleanup(ctx, ctl.AWSProvider.EC2(), ctl.AWSProvider.ELB(), ctl.AWSProvider.ELBV2(), clientSet, cfg); err != nil {
63+
// Create rest.Config for Gateway API cleanup
64+
// If this fails, we'll pass nil and skip Gateway cleanup but continue with Service/Ingress
65+
var restConfig *rest.Config
66+
if ctl.KubeProvider != nil {
67+
rawClient, err := ctl.NewRawClient(cfg)
68+
if err != nil {
69+
logger.Warning("failed to create Kubernetes client for Gateway API cleanup, will skip Gateway resources: %v", err)
70+
} else if rawClient != nil {
71+
restConfig = rawClient.RestConfig()
72+
}
73+
}
74+
75+
logger.Info("cleaning up AWS load balancers created by Kubernetes objects of Kind Service, Ingress, or Gateway")
76+
if err := elb.Cleanup(ctx, ctl.AWSProvider.EC2(), ctl.AWSProvider.ELB(), ctl.AWSProvider.ELBV2(), clientSet, restConfig, cfg); err != nil {
6477
return err
6578
}
6679
}

pkg/actions/cluster/export_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cluster
22

33
import (
4+
"github.com/weaveworks/eksctl/pkg/eks"
45
"github.com/weaveworks/eksctl/pkg/kubernetes"
56
)
67

@@ -24,6 +25,14 @@ func (c *OwnedCluster) SetNewNodeGroupDrainer(newNodeGroupDrainer func(kubernete
2425
c.newNodeGroupDrainer = newNodeGroupDrainer
2526
}
2627

28+
func (c *OwnedCluster) MockKubeProvider(k eks.KubeProvider) {
29+
c.ctl.KubeProvider = k
30+
}
31+
32+
func (c *UnownedCluster) MockKubeProvider(k eks.KubeProvider) {
33+
c.ctl.KubeProvider = k
34+
}
35+
2736
func SetProviderConstructor(f ProviderConstructor) {
2837
newClusterProvider = f
2938
}

pkg/actions/cluster/owned_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/weaveworks/eksctl/pkg/cfn/manager/fakes"
2424
"github.com/weaveworks/eksctl/pkg/ctl/cmdutils"
2525
"github.com/weaveworks/eksctl/pkg/eks"
26+
eksfakes "github.com/weaveworks/eksctl/pkg/eks/fakes"
2627
"github.com/weaveworks/eksctl/pkg/kubernetes"
2728
"github.com/weaveworks/eksctl/pkg/testutils"
2829
"github.com/weaveworks/eksctl/pkg/testutils/mockprovider"
@@ -119,6 +120,11 @@ var _ = Describe("Delete", func() {
119120
c := cluster.NewOwnedCluster(cfg, ctl, nil, fakeStackManager, autoModeDeleter)
120121
fakeClientSet = fake.NewSimpleClientset()
121122

123+
// Mock KubeProvider to return nil for NewRawClient (Gateway API not available)
124+
fakeKubeProvider := &eksfakes.FakeKubeProvider{}
125+
fakeKubeProvider.NewRawClientReturns(nil, nil)
126+
c.MockKubeProvider(fakeKubeProvider)
127+
122128
c.SetNewClientSet(func() (kubernetes.Interface, error) {
123129
return fakeClientSet, nil
124130
})
@@ -187,6 +193,11 @@ var _ = Describe("Delete", func() {
187193
c := cluster.NewOwnedCluster(cfg, ctl, nil, fakeStackManager, autoModeDeleter)
188194
fakeClientSet = fake.NewSimpleClientset()
189195

196+
// Mock KubeProvider to return nil for NewRawClient (Gateway API not available)
197+
fakeKubeProvider := &eksfakes.FakeKubeProvider{}
198+
fakeKubeProvider.NewRawClientReturns(nil, nil)
199+
c.MockKubeProvider(fakeKubeProvider)
200+
190201
c.SetNewClientSet(func() (kubernetes.Interface, error) {
191202
return fakeClientSet, nil
192203
})
@@ -252,6 +263,11 @@ var _ = Describe("Delete", func() {
252263
c := cluster.NewOwnedCluster(cfg, ctl, nil, fakeStackManager, autoModeDeleter)
253264
fakeClientSet = fake.NewSimpleClientset()
254265

266+
// Mock KubeProvider to return nil for NewRawClient (Gateway API not available)
267+
fakeKubeProvider := &eksfakes.FakeKubeProvider{}
268+
fakeKubeProvider.NewRawClientReturns(nil, nil)
269+
c.MockKubeProvider(fakeKubeProvider)
270+
255271
c.SetNewClientSet(func() (kubernetes.Interface, error) {
256272
return fakeClientSet, nil
257273
})
@@ -320,6 +336,12 @@ var _ = Describe("Delete", func() {
320336
}, nil)
321337

322338
c := cluster.NewOwnedCluster(cfg, ctl, nil, fakeStackManager, autoModeDeleter)
339+
340+
// Mock KubeProvider to return nil for NewRawClient (Gateway API not available)
341+
fakeKubeProvider := &eksfakes.FakeKubeProvider{}
342+
fakeKubeProvider.NewRawClientReturns(nil, nil)
343+
c.MockKubeProvider(fakeKubeProvider)
344+
323345
c.SetNewNodeGroupDrainer(func(clientSet kubernetes.Interface) cluster.NodeGroupDrainer {
324346
mockedDrainer := &drainerMockOwned{}
325347
mockedDrainer.On("Drain", mock.Anything).Return(nil)

pkg/actions/cluster/unowned_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/weaveworks/eksctl/pkg/cfn/manager/fakes"
2626
"github.com/weaveworks/eksctl/pkg/ctl/cmdutils"
2727
"github.com/weaveworks/eksctl/pkg/eks"
28+
eksfakes "github.com/weaveworks/eksctl/pkg/eks/fakes"
2829
"github.com/weaveworks/eksctl/pkg/kubernetes"
2930
"github.com/weaveworks/eksctl/pkg/testutils"
3031
"github.com/weaveworks/eksctl/pkg/testutils/mockprovider"
@@ -154,6 +155,11 @@ var _ = Describe("Delete", func() {
154155
c := cluster.NewUnownedCluster(cfg, ctl, fakeStackManager, autoModeDeleter)
155156
fakeClientSet := fake.NewSimpleClientset()
156157

158+
// Mock KubeProvider to return nil for NewRawClient (Gateway API not available)
159+
fakeKubeProvider := &eksfakes.FakeKubeProvider{}
160+
fakeKubeProvider.NewRawClientReturns(nil, nil)
161+
c.MockKubeProvider(fakeKubeProvider)
162+
157163
c.SetNewClientSet(func() (kubernetes.Interface, error) {
158164
return fakeClientSet, nil
159165
})
@@ -245,6 +251,11 @@ var _ = Describe("Delete", func() {
245251
c := cluster.NewUnownedCluster(cfg, ctl, fakeStackManager, autoModeDeleter)
246252
fakeClientSet := fake.NewSimpleClientset()
247253

254+
// Mock KubeProvider to return nil for NewRawClient (Gateway API not available)
255+
fakeKubeProvider := &eksfakes.FakeKubeProvider{}
256+
fakeKubeProvider.NewRawClientReturns(nil, nil)
257+
c.MockKubeProvider(fakeKubeProvider)
258+
248259
c.SetNewClientSet(func() (kubernetes.Interface, error) {
249260
return fakeClientSet, nil
250261
})
@@ -340,6 +351,11 @@ var _ = Describe("Delete", func() {
340351
c := cluster.NewUnownedCluster(cfg, ctl, fakeStackManager, autoModeDeleter)
341352
fakeClientSet := fake.NewSimpleClientset()
342353

354+
// Mock KubeProvider to return nil for NewRawClient (Gateway API not available)
355+
fakeKubeProvider := &eksfakes.FakeKubeProvider{}
356+
fakeKubeProvider.NewRawClientReturns(nil, nil)
357+
c.MockKubeProvider(fakeKubeProvider)
358+
343359
c.SetNewClientSet(func() (kubernetes.Interface, error) {
344360
return fakeClientSet, nil
345361
})
@@ -428,6 +444,12 @@ var _ = Describe("Delete", func() {
428444
p.MockEKS().On("DeleteCluster", mock.Anything, mock.Anything).Return(&awseks.DeleteClusterOutput{}, nil)
429445

430446
c := cluster.NewUnownedCluster(cfg, ctl, fakeStackManager, autoModeDeleter)
447+
448+
// Mock KubeProvider to return nil for NewRawClient (Gateway API not available)
449+
fakeKubeProvider := &eksfakes.FakeKubeProvider{}
450+
fakeKubeProvider.NewRawClientReturns(nil, nil)
451+
c.MockKubeProvider(fakeKubeProvider)
452+
431453
err := c.Delete(context.Background(), time.Microsecond, time.Second*0, false, false, false, 1)
432454
Expect(err).NotTo(HaveOccurred())
433455
Expect(fakeStackManager.DeleteTasksForDeprecatedStacksCallCount()).To(Equal(1))

0 commit comments

Comments
 (0)