@@ -30,6 +30,7 @@ import (
30
30
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
31
31
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
32
32
"k8s.io/apimachinery/pkg/util/intstr"
33
+ "k8s.io/apimachinery/pkg/util/wait"
33
34
"k8s.io/client-go/dynamic"
34
35
clientset "k8s.io/client-go/kubernetes"
35
36
"k8s.io/kubernetes/test/e2e/framework"
@@ -167,6 +168,7 @@ var _ = SIGDescribe("CustomResourceConversionWebhook [Privileged:ClusterAdmin]",
167
168
return
168
169
}
169
170
defer testcrd .CleanUp ()
171
+ waitWebhookConversionReady (f , testcrd .Crd , testcrd .DynamicClients , "v2" )
170
172
testCustomResourceConversionWebhook (f , testcrd .Crd , testcrd .DynamicClients )
171
173
})
172
174
@@ -201,6 +203,7 @@ var _ = SIGDescribe("CustomResourceConversionWebhook [Privileged:ClusterAdmin]",
201
203
return
202
204
}
203
205
defer testcrd .CleanUp ()
206
+ waitWebhookConversionReady (f , testcrd .Crd , testcrd .DynamicClients , "v2" )
204
207
testCRListConversion (f , testcrd )
205
208
})
206
209
})
@@ -485,3 +488,29 @@ func testCRListConversion(f *framework.Framework, testCrd *crd.TestCrd) {
485
488
verifyV2Object (f , crd , & list .Items [0 ])
486
489
verifyV2Object (f , crd , & list .Items [1 ])
487
490
}
491
+
492
+ // waitWebhookConversionReady sends stub custom resource creation requests requiring conversion until one succeeds.
493
+ func waitWebhookConversionReady (f * framework.Framework , crd * apiextensionsv1.CustomResourceDefinition , customResourceClients map [string ]dynamic.ResourceInterface , version string ) {
494
+ framework .ExpectNoError (wait .PollImmediate (100 * time .Millisecond , 30 * time .Second , func () (bool , error ) {
495
+ crInstance := & unstructured.Unstructured {
496
+ Object : map [string ]interface {}{
497
+ "kind" : crd .Spec .Names .Kind ,
498
+ "apiVersion" : crd .Spec .Group + "/" + version ,
499
+ "metadata" : map [string ]interface {}{
500
+ "name" : f .UniqueName ,
501
+ "namespace" : f .Namespace .Name ,
502
+ },
503
+ },
504
+ }
505
+ _ , err := customResourceClients [version ].Create (crInstance , metav1.CreateOptions {})
506
+ if err != nil {
507
+ // tolerate clusters that do not set --enable-aggregator-routing and have to wait for kube-proxy
508
+ // to program the service network, during which conversion requests return errors
509
+ e2elog .Logf ("error waiting for conversion to succeed during setup: %v" , err )
510
+ return false , nil
511
+ }
512
+
513
+ framework .ExpectNoError (customResourceClients [version ].Delete (crInstance .GetName (), nil ), "cleaning up stub object" )
514
+ return true , nil
515
+ }))
516
+ }
0 commit comments