From 1906bda54150468fd4d5fb61630068d599dc7e4c Mon Sep 17 00:00:00 2001 From: jonyhy96 Date: Wed, 29 Jun 2022 12:28:24 +0800 Subject: [PATCH] feat: make jsonpath wait logics consistent with condition Signed-off-by: jonyhy96 Kubernetes-commit: 7a1493be5679ed3ec85b7fdef685c7e6b580e8e4 --- pkg/cmd/wait/wait.go | 8 ++++---- pkg/cmd/wait/wait_test.go | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/cmd/wait/wait.go b/pkg/cmd/wait/wait.go index 175cf4424..e9632332b 100644 --- a/pkg/cmd/wait/wait.go +++ b/pkg/cmd/wait/wait.go @@ -229,7 +229,7 @@ func conditionFuncFor(condition string, errOut io.Writer) (ConditionFunc, error) // newJSONPathParser will create a new JSONPath parser based on the jsonPathExpression func newJSONPathParser(jsonPathExpression string) (*jsonpath.JSONPath, error) { - j := jsonpath.New("wait") + j := jsonpath.New("wait").AllowMissingKeys(true) if jsonPathExpression == "" { return nil, errors.New("jsonpath expression cannot be empty") } @@ -624,6 +624,9 @@ func (j JSONPathWait) checkCondition(obj *unstructured.Unstructured) (bool, erro if err != nil { return false, err } + if len(parseResults) == 0 || len(parseResults[0]) == 0 { + return false, nil + } if err := verifyParsedJSONPath(parseResults); err != nil { return false, err } @@ -637,9 +640,6 @@ func (j JSONPathWait) checkCondition(obj *unstructured.Unstructured) (bool, erro // verifyParsedJSONPath verifies the JSON received from the API server is valid. // It will only accept a single JSON func verifyParsedJSONPath(results [][]reflect.Value) error { - if len(results) == 0 { - return errors.New("given jsonpath expression does not match any value") - } if len(results) > 1 { return errors.New("given jsonpath expression matches more than one list") } diff --git a/pkg/cmd/wait/wait_test.go b/pkg/cmd/wait/wait_test.go index 1f3fdeedb..ae0cd59a4 100644 --- a/pkg/cmd/wait/wait_test.go +++ b/pkg/cmd/wait/wait_test.go @@ -1043,7 +1043,7 @@ func TestWaitForDifferentJSONPathExpression(t *testing.T) { jsonPathExp: "{.foo.bar}", jsonPathCond: "baz", - expectedErr: "foo is not found", + expectedErr: "timed out waiting for the condition on theresource/foo-b6699dcfb-rnv7t", }, { name: "compare boolean JSONPath entry",