diff --git a/pkg/kapp/resourcesmisc/custom_waiting_resource.go b/pkg/kapp/resourcesmisc/custom_waiting_resource.go index 110ea5689..f3d8065e5 100644 --- a/pkg/kapp/resourcesmisc/custom_waiting_resource.go +++ b/pkg/kapp/resourcesmisc/custom_waiting_resource.go @@ -65,10 +65,16 @@ func (s CustomWaitingResource) IsDoneApplying() DoneApplyState { } if s.waitRule.Ytt != nil { + startTime, found := timeoutMap.Load(s.resource.Description()) + if !found { + timeoutMap.Store(s.resource.Description(), time.Now().Unix()) + } configObj, err := WaitRuleContractV1{ ResourceMatcher: ctlres.AnyMatcher{ Matchers: ctlconf.ResourceMatchers(s.waitRule.ResourceMatchers).AsResourceMatchers()}, - Starlark: s.waitRule.Ytt.FuncContractV1.Resource, + Starlark: s.waitRule.Ytt.FuncContractV1.Resource, + CurrentTime: time.Now().Unix(), + StartTime: startTime.(int64), }.Apply(s.resource) if err != nil { return DoneApplyState{Done: true, Successful: false, Message: fmt.Sprintf( @@ -99,8 +105,8 @@ func (s CustomWaitingResource) IsDoneApplying() DoneApplyState { isTimeOutConditionPresent = true if s.hasTimeoutOccurred(condMatcher.Timeout, s.resource.Description()) { return DoneApplyState{Done: true, Successful: false, Message: fmt.Sprintf( - "Encountered failure condition %s == %s: %s (message: %s) continuously for %s duration", - cond.Type, condMatcher.Status, cond.Reason, cond.Message, condMatcher.Timeout)} + "continuously failed for %s with %s == %s: %s (message: %s)", + condMatcher.Timeout, cond.Type, condMatcher.Status, cond.Reason, cond.Message)} } return DoneApplyState{Done: false, Message: fmt.Sprintf( "%s: %s (message: %s)", diff --git a/pkg/kapp/resourcesmisc/wait_rule_contract_v1.go b/pkg/kapp/resourcesmisc/wait_rule_contract_v1.go index e1344d9ac..077247eeb 100644 --- a/pkg/kapp/resourcesmisc/wait_rule_contract_v1.go +++ b/pkg/kapp/resourcesmisc/wait_rule_contract_v1.go @@ -16,6 +16,8 @@ import ( type WaitRuleContractV1 struct { ResourceMatcher ctlres.ResourceMatcher Starlark string + CurrentTime int64 + StartTime int64 } type waitRuleContractV1Result struct { @@ -48,6 +50,7 @@ func (t WaitRuleContractV1) evalYtt(res ctlres.Resource) (*WaitRuleContractV1Res } return yaml.Marshal(res.DeepCopyRaw()) } + opts.DataValuesFlags.KVsFromStrings = []string{fmt.Sprintf("startTime=%d", t.StartTime), fmt.Sprintf("currentTime=%d", t.CurrentTime)} filesToProcess := []*files.File{ files.MustNewFileFromSource(files.NewBytesSource("resource.star", []byte(t.Starlark))), diff --git a/test/e2e/wait_timeout_test.go b/test/e2e/wait_timeout_test.go index b6b4ccecb..515222791 100644 --- a/test/e2e/wait_timeout_test.go +++ b/test/e2e/wait_timeout_test.go @@ -103,7 +103,7 @@ waitRules: RunOpts{IntoNs: true, AllowError: true, StdinReader: strings.NewReader(fmt.Sprintf(yaml2, "nginx:200"))}) require.Error(t, err) - require.Contains(t, err.Error(), "message: containers with unready status: [nginx]) continuously for 50s duration") + require.Contains(t, err.Error(), "Continuously failed for 50s with") }) cleanUp()