From bf47eedcb33543dc14e1f64b19198bdc057a1dc6 Mon Sep 17 00:00:00 2001 From: Peter Rifel Date: Fri, 28 Jul 2023 18:49:35 -0500 Subject: [PATCH 1/2] Add an inner error to TryAgainLaterError --- upup/pkg/fi/context.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/upup/pkg/fi/context.go b/upup/pkg/fi/context.go index 296a0f758a..61c5087c7c 100644 --- a/upup/pkg/fi/context.go +++ b/upup/pkg/fi/context.go @@ -273,7 +273,8 @@ func (e *ExistsAndWarnIfChangesError) Error() string { return e.msg } // TryAgainLaterError is the custom used when a task needs to fail validation with a message and try again later type TryAgainLaterError struct { - msg string + msg string + inner error } // NewTryAgainLaterError is a builder for TryAgainLaterError. @@ -283,5 +284,17 @@ func NewTryAgainLaterError(message string) *TryAgainLaterError { } } +func (e *TryAgainLaterError) WithError(err error) *TryAgainLaterError { + e.inner = err + return e +} + // TryAgainLaterError implementation of the error interface. -func (e *TryAgainLaterError) Error() string { return e.msg } +func (e *TryAgainLaterError) Error() string { + if e.inner != nil { + return fmt.Sprintf("%v: %v", e.msg, e.inner) + } + return e.msg +} + +func (e *TryAgainLaterError) Unwrap() error { return e.inner } From 99d2f2305498c9f3d2113b9b5f4a35947b275885 Mon Sep 17 00:00:00 2001 From: Peter Rifel Date: Fri, 28 Jul 2023 18:50:19 -0500 Subject: [PATCH 2/2] Pass PutWarmPool error to TryAgainLaterError --- upup/pkg/fi/cloudup/awstasks/warmpool.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upup/pkg/fi/cloudup/awstasks/warmpool.go b/upup/pkg/fi/cloudup/awstasks/warmpool.go index 18f84a3c68..84397ae18f 100644 --- a/upup/pkg/fi/cloudup/awstasks/warmpool.go +++ b/upup/pkg/fi/cloudup/awstasks/warmpool.go @@ -99,7 +99,7 @@ func (*WarmPool) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *WarmPool) error _, err := svc.PutWarmPool(request) if err != nil { if awsup.AWSErrorCode(err) == "ValidationError" { - return fi.NewTryAgainLaterError("waiting for ASG to become ready") + return fi.NewTryAgainLaterError("waiting for ASG to become ready").WithError(err) } return fmt.Errorf("error modifying warm pool: %w", err) }