diff --git a/cmd/yoke/cmd_descent.go b/cmd/yoke/cmd_descent.go index 26343af..93d5366 100644 --- a/cmd/yoke/cmd_descent.go +++ b/cmd/yoke/cmd_descent.go @@ -21,8 +21,7 @@ func init() { type DescentParams struct { GlobalSettings - Release string - RevisionID int + yoke.DescentParams } func GetDescentfParams(settings GlobalSettings, args []string) (*DescentParams, error) { @@ -39,6 +38,8 @@ func GetDescentfParams(settings GlobalSettings, args []string) (*DescentParams, RegisterGlobalFlags(flagset, ¶ms.GlobalSettings) + flagset.DurationVar(¶ms.Wait, "wait", 0, "time to wait for release to become ready") + flagset.Parse(args) params.Release = flagset.Arg(0) @@ -65,9 +66,5 @@ func Descent(ctx context.Context, params DescentParams) error { if err != nil { return fmt.Errorf("failed to instantiate k8 client: %w", err) } - - return commander.Descent(ctx, yoke.DescentParams{ - Release: params.Release, - RevisionID: params.RevisionID, - }) + return commander.Descent(ctx, params.DescentParams) } diff --git a/pkg/yoke/yoke.go b/pkg/yoke/yoke.go index c7ea202..06a8910 100644 --- a/pkg/yoke/yoke.go +++ b/pkg/yoke/yoke.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "reflect" + "time" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -32,6 +33,7 @@ func FromK8Client(client *k8s.Client) *Commander { type DescentParams struct { Release string RevisionID int + Wait time.Duration } func (commander Commander) Descent(ctx context.Context, params DescentParams) error { @@ -88,6 +90,12 @@ func (commander Commander) Descent(ctx context.Context, params DescentParams) er return fmt.Errorf("failed to update resource release mapping: %w", err) } + if params.Wait > 0 { + if err := commander.k8s.WaitForReadyMany(ctx, next.Resources, k8s.WaitOptions{Timeout: params.Wait}); err != nil { + return fmt.Errorf("release did not become ready within wait period: %w", err) + } + } + return nil } diff --git a/pkg/yoke/yoke_takeoff.go b/pkg/yoke/yoke_takeoff.go index 5529a7b..6fce1d4 100644 --- a/pkg/yoke/yoke_takeoff.go +++ b/pkg/yoke/yoke_takeoff.go @@ -178,7 +178,7 @@ func (commander Commander) Takeoff(ctx context.Context, params TakeoffParams) er if params.Wait > 0 { if err := commander.k8s.WaitForReadyMany(ctx, resources, k8s.WaitOptions{Timeout: params.Wait}); err != nil { - return fmt.Errorf("release did not become ready within %s timeout: to rollback use `yoke descent`: %w", params.Wait.String(), err) + return fmt.Errorf("release did not become ready within wait period: to rollback use `yoke descent`: %w", err) } }