Merge pull request #44512 from mengqiy/kubectl_describe_retry

Automatic merge from submit-queue

retry when checking output of kubectl describe e2e test

Add retry for kubectl describe e2e test according to https://github.com/kubernetes/kubernetes/issues/41898#issuecomment-294175426

fixes: #41898 

cc: @fejta
pull/6/head
Kubernetes Submit Queue 2017-04-18 15:38:24 -07:00 committed by GitHub
commit c9b9b38ced
1 changed files with 31 additions and 6 deletions

View File

@ -787,7 +787,6 @@ var _ = framework.KubeDescribe("Kubectl client", func() {
}) })
// Rc // Rc
output := framework.RunKubectlOrDie("describe", "rc", "redis-master", nsFlag)
requiredStrings := [][]string{ requiredStrings := [][]string{
{"Name:", "redis-master"}, {"Name:", "redis-master"},
{"Namespace:", ns}, {"Namespace:", ns},
@ -800,10 +799,10 @@ var _ = framework.KubeDescribe("Kubectl client", func() {
{"Pod Template:"}, {"Pod Template:"},
{"Image:", redisImage}, {"Image:", redisImage},
{"Events:"}} {"Events:"}}
checkOutput(output, requiredStrings) checkKubectlOutputWithRetry(requiredStrings, "describe", "rc", "redis-master", nsFlag)
// Service // Service
output = framework.RunKubectlOrDie("describe", "service", "redis-master", nsFlag) output := framework.RunKubectlOrDie("describe", "service", "redis-master", nsFlag)
requiredStrings = [][]string{ requiredStrings = [][]string{
{"Name:", "redis-master"}, {"Name:", "redis-master"},
{"Namespace:", ns}, {"Namespace:", ns},
@ -1630,7 +1629,7 @@ var _ = framework.KubeDescribe("Kubectl client", func() {
}) })
// Checks whether the output split by line contains the required elements. // Checks whether the output split by line contains the required elements.
func checkOutput(output string, required [][]string) { func checkOutputReturnError(output string, required [][]string) error {
outputLines := strings.Split(output, "\n") outputLines := strings.Split(output, "\n")
currentLine := 0 currentLine := 0
for _, requirement := range required { for _, requirement := range required {
@ -1638,14 +1637,40 @@ func checkOutput(output string, required [][]string) {
currentLine++ currentLine++
} }
if currentLine == len(outputLines) { if currentLine == len(outputLines) {
framework.Failf("Failed to find %s in %s", requirement[0], output) return fmt.Errorf("failed to find %s in %s", requirement[0], output)
} }
for _, item := range requirement[1:] { for _, item := range requirement[1:] {
if !strings.Contains(outputLines[currentLine], item) { if !strings.Contains(outputLines[currentLine], item) {
framework.Failf("Failed to find %s in %s", item, outputLines[currentLine]) return fmt.Errorf("failed to find %s in %s", item, outputLines[currentLine])
} }
} }
} }
return nil
}
func checkOutput(output string, required [][]string) {
err := checkOutputReturnError(output, required)
if err != nil {
framework.Failf("%v", err)
}
}
func checkKubectlOutputWithRetry(required [][]string, args ...string) {
var pollErr error
wait.PollImmediate(time.Second, time.Minute, func() (bool, error) {
output := framework.RunKubectlOrDie(args...)
err := checkOutputReturnError(output, required)
if err != nil {
pollErr = err
return false, nil
}
pollErr = nil
return true, nil
})
if pollErr != nil {
framework.Failf("%v", pollErr)
}
return
} }
func getAPIVersions(apiEndpoint string) (*metav1.APIVersions, error) { func getAPIVersions(apiEndpoint string) (*metav1.APIVersions, error) {