Skip to content
This repository was archived by the owner on Oct 10, 2023. It is now read-only.

Commit d9bd44b

Browse files
author
Adolfo Duarte
authored
getGVR should only fail if no api resources are found (#4459)
The call to ServerPreferredResources could return an error even thoug the reource list is not empty. This should not be a failure if the reource list is not empty. This patch checks that if the error returned by ServerPreferredResoruces is "ErrorGroupDiscoveryFailed", the getGVR will only return a error (failure) if the resulting resource list is also empty.
1 parent 20d147c commit d9bd44b

File tree

5 files changed

+150
-1
lines changed

5 files changed

+150
-1
lines changed

addons/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ require (
3434
k8s.io/client-go v0.24.6
3535
k8s.io/component-base v0.24.6
3636
k8s.io/klog/v2 v2.70.1
37+
k8s.io/kube-aggregator v0.22.4
3738
k8s.io/utils v0.0.0-20220812165043-ad590609e2e5
3839
knative.dev/pkg v0.0.0-20220302134643-d2cdc682d974
3940
sigs.k8s.io/cluster-api v1.2.8

addons/go.sum

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
6262
cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
6363
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
6464
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
65+
github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
6566
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
6667
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
6768
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
@@ -670,6 +671,7 @@ github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx
670671
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
671672
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
672673
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
674+
github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A=
673675
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
674676
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
675677
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
@@ -1108,6 +1110,7 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
11081110
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
11091111
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
11101112
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
1113+
golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
11111114
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
11121115
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
11131116
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
@@ -1297,6 +1300,7 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
12971300
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
12981301
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
12991302
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
1303+
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
13001304
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
13011305
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
13021306
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1632,6 +1636,7 @@ k8s.io/api v0.17.4/go.mod h1:5qxx6vjmwUVG2nHQTKGlLts8Tbok8PzHl4vHtVFuZCA=
16321636
k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78=
16331637
k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI=
16341638
k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
1639+
k8s.io/api v0.22.4/go.mod h1:Rgs+9gIGYC5laXQSZZ9JqT5NevNgoGiOdVWi1BAB3qk=
16351640
k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I=
16361641
k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg=
16371642
k8s.io/api v0.24.6 h1:9EZhqZv4Ct++e6XMh3f5bmP4XMxsuxf4c7WOCCjYvF8=
@@ -1647,13 +1652,15 @@ k8s.io/apimachinery v0.17.4/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0
16471652
k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA=
16481653
k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
16491654
k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY=
1655+
k8s.io/apimachinery v0.22.4/go.mod h1:yU6oA6Gnax9RrxGzVvPFFJ+mpnW6PBSqp0sx0I0HHW0=
16501656
k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM=
16511657
k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM=
16521658
k8s.io/apimachinery v0.24.6 h1:Sp4EHDrBtm0V1z/8poY52HhP79dAIcI9lb9DUG54XPc=
16531659
k8s.io/apimachinery v0.24.6/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM=
16541660
k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw=
16551661
k8s.io/apiserver v0.19.2/go.mod h1:FreAq0bJ2vtZFj9Ago/X0oNGC51GfubKK/ViOKfVAOA=
16561662
k8s.io/apiserver v0.21.1/go.mod h1:nLLYZvMWn35glJ4/FZRhzLG/3MPxAaZTgV4FJZdr+tY=
1663+
k8s.io/apiserver v0.22.4/go.mod h1:38WmcUZiiy41A7Aty8/VorWRa8vDGqoUzDf2XYlku0E=
16571664
k8s.io/apiserver v0.24.2/go.mod h1:pSuKzr3zV+L+MWqsEo0kHHYwCo77AT5qXbFXP2jbvFI=
16581665
k8s.io/apiserver v0.24.6 h1:LEVuJb3bwjbZSIA8Ltm6iNBJiFawJtEGmAP7bgMljIE=
16591666
k8s.io/apiserver v0.24.6/go.mod h1:ZmMXlYsNUhWzEOMJv01JqjL/psUzmvcIF70yDnzen/A=
@@ -1663,6 +1670,7 @@ k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI=
16631670
k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU=
16641671
k8s.io/client-go v0.19.2/go.mod h1:S5wPhCqyDNAlzM9CnEdgTGV4OqhsW3jGO1UM1epwfJA=
16651672
k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs=
1673+
k8s.io/client-go v0.22.4/go.mod h1:Yzw4e5e7h1LNHA4uqnMVrpEpUs1hJOiuBsJKIlRCHDA=
16661674
k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw=
16671675
k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30=
16681676
k8s.io/client-go v0.24.6 h1:q7gZYyGL0Iv9zynYOFi5DHc3NFZ2aA0P56QpWFXbEyE=
@@ -1673,12 +1681,14 @@ k8s.io/cluster-bootstrap v0.24.6/go.mod h1:xSik/M1tAJ7Q09HWcCzBtHoMB05QPygQJT7Z2
16731681
k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
16741682
k8s.io/code-generator v0.19.2/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk=
16751683
k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
1684+
k8s.io/code-generator v0.22.4/go.mod h1:qjYl54pQ/emhkT0UxbufbREYJMWsHNNV/jSVwhYZQGw=
16761685
k8s.io/code-generator v0.24.0/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w=
16771686
k8s.io/code-generator v0.24.2/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w=
16781687
k8s.io/code-generator v0.24.6/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w=
16791688
k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM=
16801689
k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo=
16811690
k8s.io/component-base v0.21.1/go.mod h1:NgzFZ2qu4m1juby4TnrmpR8adRk6ka62YdH5DkIIyKA=
1691+
k8s.io/component-base v0.22.4/go.mod h1:MrSaQy4a3tFVViff8TZL6JHYSewNCLshZCwHYM58v5A=
16821692
k8s.io/component-base v0.24.0/go.mod h1:Dgazgon0i7KYUsS8krG8muGiMVtUZxG037l1MKyXgrA=
16831693
k8s.io/component-base v0.24.2/go.mod h1:ucHwW76dajvQ9B7+zecZAP3BVqvrHoOxm8olHEg0nmM=
16841694
k8s.io/component-base v0.24.6 h1:LqSZunOeX1l6BpsMaD+iiJJSxZYl7IlVFW6qQu52ikA=
@@ -1698,14 +1708,18 @@ k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
16981708
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
16991709
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
17001710
k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
1711+
k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
17011712
k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
17021713
k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ=
17031714
k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
1715+
k8s.io/kube-aggregator v0.22.4 h1:2aJMJMhWyKFRtVlj2ofGHewfjODXrMkjwkNlN1jn2jU=
1716+
k8s.io/kube-aggregator v0.22.4/go.mod h1:nH2L1wiG9pMqYV7P8XIMb9RbIEZPBwxz0iJqPPrtALU=
17041717
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
17051718
k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
17061719
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
17071720
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
17081721
k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
1722+
k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
17091723
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk=
17101724
k8s.io/kube-openapi v0.0.0-20221207184640-f3cff1453715 h1:tBEbstoM+K0FiBV5KGAKQ0kuvf54v/hwpldiJt69w1s=
17111725
k8s.io/kube-openapi v0.0.0-20221207184640-f3cff1453715/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
@@ -1722,6 +1736,7 @@ k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
17221736
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
17231737
k8s.io/utils v0.0.0-20210527160623-6fdb442a123b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
17241738
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
1739+
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
17251740
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
17261741
k8s.io/utils v0.0.0-20220812165043-ad590609e2e5 h1:XmRqFcQlCy/lKRZ39j+RVpokYNroHPqV3mcBRfnhT5o=
17271742
k8s.io/utils v0.0.0-20220812165043-ad590609e2e5/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
@@ -1733,6 +1748,7 @@ rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
17331748
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
17341749
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0=
17351750
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
1751+
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
17361752
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw=
17371753
sigs.k8s.io/cluster-api v1.2.8 h1:O0ZGyxGBeJaSWVptM7U0vTArAVlxCE5OtQItZ4OS2Y4=
17381754
sigs.k8s.io/cluster-api v1.2.8/go.mod h1:HmxYwjLGHia5yjFoMY8I03Ha4kXAB+VTJnHFhAmPVig=
@@ -1758,6 +1774,7 @@ sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnM
17581774
sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
17591775
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
17601776
sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
1777+
sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
17611778
sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
17621779
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
17631780
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=

addons/webhooks/clusterbootstrap_webhook.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,10 @@ func (wh *ClusterBootstrap) getGVR(gk schema.GroupKind) (*schema.GroupVersionRes
291291
return gvr, nil
292292
}
293293
apiResourceList, err := wh.cachedDiscoveryClient.ServerPreferredResources()
294-
if err != nil {
294+
// ServerPreferredResources will return a list for apiResourceList, even if err != nil.
295+
// For example, in the case that one of the api resource is not found, it will return err != nil,
296+
// but the list returned might not ber empty.
297+
if _, ok := err.(*discovery.ErrGroupDiscoveryFailed); err != nil && !ok {
295298
return nil, err
296299
}
297300
for _, apiResource := range apiResourceList {

addons/webhooks/clusterbootstrap_webhook_test.go

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1515
"k8s.io/apimachinery/pkg/util/uuid"
1616
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
17+
apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
1718
clusterapiv1beta1 "sigs.k8s.io/cluster-api/api/v1beta1"
1819
"sigs.k8s.io/controller-runtime/pkg/client"
1920
"sigs.k8s.io/controller-runtime/pkg/client/fake"
@@ -22,6 +23,7 @@ import (
2223
packagev1alpha1 "github.com/vmware-tanzu/carvel-kapp-controller/pkg/apiserver/apis/datapackaging/v1alpha1"
2324
"github.com/vmware-tanzu/tanzu-framework/addons/pkg/constants"
2425
"github.com/vmware-tanzu/tanzu-framework/addons/webhooks"
26+
csiv1alpha1 "github.com/vmware-tanzu/tanzu-framework/apis/addonconfigs/csi/v1alpha1"
2527
runv1alpha3 "github.com/vmware-tanzu/tanzu-framework/apis/run/v1alpha3"
2628
)
2729

@@ -790,3 +792,119 @@ var _ = Describe("Unmanaged CNI:", func() {
790792
})
791793
})
792794
})
795+
796+
var _ = Describe("Clusterbootstrap", func() {
797+
var (
798+
clusterBootstrapTemplate *runv1alpha3.ClusterBootstrapTemplate
799+
tanzuKubernetesRelease *runv1alpha3.TanzuKubernetesRelease
800+
clusterBootstrapName = "fake-clusterbootstrap"
801+
clusterBootstrapNamespace = "default"
802+
)
803+
BeforeEach(func() {
804+
// Prepare the Carvel packages
805+
createCarvelPackages(ctx, k8sClient)
806+
// Prepare the ClusterBootstrapTemplate
807+
clusterBootstrapTemplate = constructClusterBootstrapTemplate()
808+
err := k8sClient.Create(ctx, clusterBootstrapTemplate)
809+
if err != nil && !apierrors.IsAlreadyExists(err) {
810+
Expect(err).NotTo(HaveOccurred())
811+
}
812+
// Prepare the TanzuKubernetesRelease
813+
tanzuKubernetesRelease = constructFakeTanzuKubernetesRelease()
814+
err = k8sClient.Create(ctx, tanzuKubernetesRelease)
815+
if err != nil && !apierrors.IsAlreadyExists(err) {
816+
Expect(err).NotTo(HaveOccurred())
817+
}
818+
})
819+
AfterEach(func() {
820+
// Delete Carvel packages
821+
deleteCarvelPackages(ctx, k8sClient)
822+
823+
// Delete the ClusterBootstrapTemplate
824+
clusterBootstrapTemplate = constructClusterBootstrapTemplate()
825+
err := k8sClient.Delete(ctx, clusterBootstrapTemplate)
826+
Expect(err).NotTo(HaveOccurred())
827+
828+
// Delete the TanzuKubernetesRelease
829+
tanzuKubernetesRelease = constructFakeTanzuKubernetesRelease()
830+
err = k8sClient.Delete(ctx, tanzuKubernetesRelease)
831+
Expect(err).NotTo(HaveOccurred())
832+
})
833+
834+
Context("Create Validation", func() {
835+
AfterEach(func() {
836+
_ = k8sClient.Delete(ctx, &runv1alpha3.ClusterBootstrap{
837+
ObjectMeta: metav1.ObjectMeta{
838+
Name: clusterBootstrapName,
839+
Namespace: clusterBootstrapNamespace,
840+
},
841+
})
842+
})
843+
It("should not deny create request when some APIServices have no endpoint running", func() {
844+
// Create an external APIService which has no endpoints running
845+
var port int32 = 443
846+
customAPIService := &apiregistrationv1.APIService{
847+
ObjectMeta: metav1.ObjectMeta{
848+
Name: "v1beta1.custom.k8s.io",
849+
},
850+
Spec: apiregistrationv1.APIServiceSpec{
851+
Group: "custom.k8s.io",
852+
GroupPriorityMinimum: 100,
853+
InsecureSkipTLSVerify: true,
854+
Service: &apiregistrationv1.ServiceReference{
855+
Name: "custom-server",
856+
Namespace: "kube-system",
857+
Port: &port,
858+
},
859+
Version: "v1beta1",
860+
VersionPriority: 100,
861+
},
862+
}
863+
err := k8sClient.Create(ctx, customAPIService)
864+
Expect(err).NotTo(HaveOccurred())
865+
// Create a VSphereCSIConfig
866+
vSphereCSIConfigName := "fake-csiconfig"
867+
vSphereCSIConfig := &csiv1alpha1.VSphereCSIConfig{
868+
ObjectMeta: metav1.ObjectMeta{
869+
Name: vSphereCSIConfigName,
870+
Namespace: clusterBootstrapNamespace,
871+
},
872+
Spec: csiv1alpha1.VSphereCSIConfigSpec{
873+
VSphereCSI: csiv1alpha1.VSphereCSI{
874+
Mode: "vsphereParavirtualCSI",
875+
},
876+
},
877+
}
878+
err = k8sClient.Create(ctx, vSphereCSIConfig)
879+
Expect(err).NotTo(HaveOccurred())
880+
// Create a ClusterBootstrap with empty spec
881+
clusterBootstrap := &runv1alpha3.ClusterBootstrap{
882+
ObjectMeta: metav1.ObjectMeta{
883+
Name: clusterBootstrapName,
884+
Namespace: clusterBootstrapNamespace,
885+
Annotations: map[string]string{
886+
constants.AddCBMissingFieldsAnnotationKey: tkrName,
887+
},
888+
},
889+
Spec: &runv1alpha3.ClusterBootstrapTemplateSpec{
890+
CSI: &runv1alpha3.ClusterBootstrapPackage{
891+
RefName: fmt.Sprintf("%s.%s", fakeCSICarvelPackageRefName, fakeCarvelPackageVersion),
892+
ValuesFrom: &runv1alpha3.ValuesFrom{
893+
ProviderRef: &corev1.TypedLocalObjectReference{
894+
Name: vSphereCSIConfigName,
895+
APIGroup: &csiv1alpha1.GroupVersion.Group,
896+
Kind: "VSphereCSIConfig",
897+
},
898+
},
899+
},
900+
},
901+
}
902+
err = k8sClient.Create(ctx, clusterBootstrap)
903+
Expect(err).NotTo(HaveOccurred())
904+
905+
err = k8sClient.Get(ctx, client.ObjectKey{Namespace: clusterBootstrapNamespace, Name: clusterBootstrapName}, clusterBootstrap)
906+
Expect(err).NotTo(HaveOccurred())
907+
})
908+
})
909+
910+
})

addons/webhooks/webhooks_suite_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import (
1313
"testing"
1414
"time"
1515

16+
csiv1alpha1 "github.com/vmware-tanzu/tanzu-framework/apis/addonconfigs/csi/v1alpha1"
17+
18+
apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
19+
1620
admissionv1beta1 "k8s.io/api/admission/v1beta1"
1721
corev1 "k8s.io/api/core/v1"
1822
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -87,6 +91,12 @@ var _ = BeforeSuite(func(done Done) {
8791
Expect(err).ToNot(HaveOccurred())
8892
Expect(cfg).ToNot(BeNil())
8993

94+
err = csiv1alpha1.AddToScheme(scheme)
95+
Expect(err).NotTo(HaveOccurred())
96+
97+
err = apiregistrationv1.AddToScheme(scheme)
98+
Expect(err).NotTo(HaveOccurred())
99+
90100
err = admissionv1beta1.AddToScheme(scheme)
91101
Expect(err).NotTo(HaveOccurred())
92102

0 commit comments

Comments
 (0)