feat(kube): add OrderedStrategy WaitStrategy for HIP-0025 sequencing

- Add OrderedStrategy constant to WaitStrategy enum
- OrderedStrategy delegates to StatusWatcher for readiness checks
- Batching/sequencing logic handled by action layer
- Accept --wait=ordered in CLI flag parser
pull/31991/head
caretak3r 8 months ago
parent 01fdc96bf5
commit c8a23f0454
No known key found for this signature in database
GPG Key ID: 9A0DD6E91D0288EC

@ -59,7 +59,7 @@ func AddWaitFlag(cmd *cobra.Command, wait *kube.WaitStrategy) {
cmd.Flags().Var( cmd.Flags().Var(
newWaitValue(kube.HookOnlyStrategy, wait), newWaitValue(kube.HookOnlyStrategy, wait),
"wait", "wait",
"wait until resources are ready (up to --timeout). Use '--wait' alone for 'watcher' strategy, or specify one of: 'watcher', 'hookOnly', 'legacy'. Default when flag is omitted: 'hookOnly'.", "wait until resources are ready (up to --timeout). Use '--wait' alone for 'watcher' strategy, or specify one of: 'watcher', 'hookOnly', 'legacy', 'ordered'. Default when flag is omitted: 'hookOnly'. 'ordered' enables HIP-0025 sequencing.",
) )
cmd.Flags().Lookup("wait").NoOptDefVal = string(kube.StatusWatcherStrategy) cmd.Flags().Lookup("wait").NoOptDefVal = string(kube.StatusWatcherStrategy)
} }
@ -80,7 +80,7 @@ func (ws *waitValue) String() string {
func (ws *waitValue) Set(s string) error { func (ws *waitValue) Set(s string) error {
switch s { switch s {
case string(kube.StatusWatcherStrategy), string(kube.LegacyStrategy), string(kube.HookOnlyStrategy): case string(kube.StatusWatcherStrategy), string(kube.LegacyStrategy), string(kube.HookOnlyStrategy), string(kube.OrderedStrategy):
*ws = waitValue(s) *ws = waitValue(s)
return nil return nil
case "true": case "true":
@ -92,7 +92,7 @@ func (ws *waitValue) Set(s string) error {
*ws = waitValue(kube.HookOnlyStrategy) *ws = waitValue(kube.HookOnlyStrategy)
return nil return nil
default: default:
return fmt.Errorf("invalid wait input %q. Valid inputs are %s, %s, and %s", s, kube.StatusWatcherStrategy, kube.HookOnlyStrategy, kube.LegacyStrategy) return fmt.Errorf("invalid wait input %q. Valid inputs are %s, %s, %s, and %s", s, kube.StatusWatcherStrategy, kube.HookOnlyStrategy, kube.LegacyStrategy, kube.OrderedStrategy)
} }
} }

@ -117,6 +117,11 @@ const (
// HookOnlyStrategy: wait only for hook Pods/Jobs to complete; does not wait for general chart resources. // HookOnlyStrategy: wait only for hook Pods/Jobs to complete; does not wait for general chart resources.
HookOnlyStrategy WaitStrategy = "hookOnly" HookOnlyStrategy WaitStrategy = "hookOnly"
// OrderedStrategy: deploy resources in dependency order defined by HIP-0025
// sequencing annotations. Each batch of resources is deployed and waited for
// before the next batch begins. Uses StatusWatcherStrategy for readiness checks.
OrderedStrategy WaitStrategy = "ordered"
) )
type FieldValidationDirective string type FieldValidationDirective string
@ -200,10 +205,14 @@ func (c *Client) GetWaiterWithOptions(strategy WaitStrategy, opts ...WaitOption)
return nil, err return nil, err
} }
return &hookOnlyWaiter{sw: sw}, nil return &hookOnlyWaiter{sw: sw}, nil
case OrderedStrategy:
// Ordered strategy uses the status watcher for readiness checks.
// The batching/sequencing logic is handled by the action layer.
return c.newStatusWatcher(opts...)
case "": case "":
return nil, errors.New("wait strategy not set. Choose one of: " + string(StatusWatcherStrategy) + ", " + string(HookOnlyStrategy) + ", " + string(LegacyStrategy)) return nil, errors.New("wait strategy not set. Choose one of: " + string(StatusWatcherStrategy) + ", " + string(HookOnlyStrategy) + ", " + string(LegacyStrategy) + ", " + string(OrderedStrategy))
default: default:
return nil, errors.New("unknown wait strategy (s" + string(strategy) + "). Valid values are: " + string(StatusWatcherStrategy) + ", " + string(HookOnlyStrategy) + ", " + string(LegacyStrategy)) return nil, errors.New("unknown wait strategy (s" + string(strategy) + "). Valid values are: " + string(StatusWatcherStrategy) + ", " + string(HookOnlyStrategy) + ", " + string(LegacyStrategy) + ", " + string(OrderedStrategy))
} }
} }

Loading…
Cancel
Save