@@ -29,6 +29,7 @@ import (
29
29
30
30
"github.com/onsi/ginkgo"
31
31
v1 "k8s.io/api/core/v1"
32
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
32
33
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
33
34
"k8s.io/apimachinery/pkg/labels"
34
35
"k8s.io/apimachinery/pkg/util/intstr"
@@ -43,6 +44,7 @@ import (
43
44
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
44
45
e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
45
46
e2essh "k8s.io/kubernetes/test/e2e/framework/ssh"
47
+ testutils "k8s.io/kubernetes/test/utils"
46
48
imageutils "k8s.io/kubernetes/test/utils/image"
47
49
)
48
50
@@ -613,7 +615,7 @@ func (config *NetworkingTestConfig) createService(serviceSpec *v1.Service) *v1.S
613
615
_ , err := config .getServiceClient ().Create (context .TODO (), serviceSpec , metav1.CreateOptions {})
614
616
framework .ExpectNoError (err , fmt .Sprintf ("Failed to create %s service: %v" , serviceSpec .Name , err ))
615
617
616
- err = framework . WaitForService (config .f .ClientSet , config .Namespace , serviceSpec .Name , true , 5 * time .Second , 45 * time .Second )
618
+ err = WaitForService (config .f .ClientSet , config .Namespace , serviceSpec .Name , true , 5 * time .Second , 45 * time .Second )
617
619
framework .ExpectNoError (err , fmt .Sprintf ("error while waiting for service:%s err: %v" , serviceSpec .Name , err ))
618
620
619
621
createdService , err := config .getServiceClient ().Get (context .TODO (), serviceSpec .Name , metav1.GetOptions {})
@@ -977,3 +979,29 @@ func UnblockNetwork(from string, to string) {
977
979
"required on host %s: remove rule %s, if exists" , from , iptablesRule )
978
980
}
979
981
}
982
+
983
+ // WaitForService waits until the service appears (exist == true), or disappears (exist == false)
984
+ func WaitForService (c clientset.Interface , namespace , name string , exist bool , interval , timeout time.Duration ) error {
985
+ err := wait .PollImmediate (interval , timeout , func () (bool , error ) {
986
+ _ , err := c .CoreV1 ().Services (namespace ).Get (context .TODO (), name , metav1.GetOptions {})
987
+ switch {
988
+ case err == nil :
989
+ framework .Logf ("Service %s in namespace %s found." , name , namespace )
990
+ return exist , nil
991
+ case apierrors .IsNotFound (err ):
992
+ framework .Logf ("Service %s in namespace %s disappeared." , name , namespace )
993
+ return ! exist , nil
994
+ case ! testutils .IsRetryableAPIError (err ):
995
+ framework .Logf ("Non-retryable failure while getting service." )
996
+ return false , err
997
+ default :
998
+ framework .Logf ("Get service %s in namespace %s failed: %v" , name , namespace , err )
999
+ return false , nil
1000
+ }
1001
+ })
1002
+ if err != nil {
1003
+ stateMsg := map [bool ]string {true : "to appear" , false : "to disappear" }
1004
+ return fmt .Errorf ("error waiting for service %s/%s %s: %v" , namespace , name , stateMsg [exist ], err )
1005
+ }
1006
+ return nil
1007
+ }
0 commit comments