diff --git a/pkg/apis/internalversion/stage_types.go b/pkg/apis/internalversion/stage_types.go index cc478684d..3fa1b4b82 100644 --- a/pkg/apis/internalversion/stage_types.go +++ b/pkg/apis/internalversion/stage_types.go @@ -57,19 +57,19 @@ type StageResourceRef struct { // StageDelay describes the delay time before going to next. type StageDelay struct { - // Duration indicates the stage delay time. - // If JitterDuration is less than Duration, then JitterDuration is used. - Duration metav1.Duration + // DurationMilliseconds indicates the stage delay time. + // If JitterDurationMilliseconds is less than DurationMilliseconds, then JitterDurationMilliseconds is used. + DurationMilliseconds *int64 // DurationFrom is the expression used to get the value. - // If it is a time.Time type, getting the value will be minus time.Now() to get Duration + // If it is a time.Time type, getting the value will be minus time.Now() to get DurationMilliseconds // If it is a string type, the value get will be parsed by time.ParseDuration. DurationFrom *ExpressionFromSource - // JitterDuration is the duration plus an additional amount chosen uniformly - // at random from the interval between Duration and JitterDuration. - JitterDuration *metav1.Duration + // JitterDurationMilliseconds is the duration plus an additional amount chosen uniformly + // at random from the interval between DurationMilliseconds and JitterDurationMilliseconds. + JitterDurationMilliseconds *int64 // JitterDurationFrom is the expression used to get the value. - // If it is a time.Time type, getting the value will be minus time.Now() to get JitterDuration + // If it is a time.Time type, getting the value will be minus time.Now() to get JitterDurationMilliseconds // If it is a string type, the value get will be parsed by time.ParseDuration. JitterDurationFrom *ExpressionFromSource } diff --git a/pkg/apis/internalversion/zz_generated.conversion.go b/pkg/apis/internalversion/zz_generated.conversion.go index d8392ad29..16eb80b20 100644 --- a/pkg/apis/internalversion/zz_generated.conversion.go +++ b/pkg/apis/internalversion/zz_generated.conversion.go @@ -705,9 +705,9 @@ func Convert_v1alpha1_Stage_To_internalversion_Stage(in *v1alpha1.Stage, out *St } func autoConvert_internalversion_StageDelay_To_v1alpha1_StageDelay(in *StageDelay, out *v1alpha1.StageDelay, s conversion.Scope) error { - out.Duration = in.Duration + out.DurationMilliseconds = (*int64)(unsafe.Pointer(in.DurationMilliseconds)) out.DurationFrom = (*v1alpha1.ExpressionFromSource)(unsafe.Pointer(in.DurationFrom)) - out.JitterDuration = (*v1.Duration)(unsafe.Pointer(in.JitterDuration)) + out.JitterDurationMilliseconds = (*int64)(unsafe.Pointer(in.JitterDurationMilliseconds)) out.JitterDurationFrom = (*v1alpha1.ExpressionFromSource)(unsafe.Pointer(in.JitterDurationFrom)) return nil } @@ -718,9 +718,9 @@ func Convert_internalversion_StageDelay_To_v1alpha1_StageDelay(in *StageDelay, o } func autoConvert_v1alpha1_StageDelay_To_internalversion_StageDelay(in *v1alpha1.StageDelay, out *StageDelay, s conversion.Scope) error { - out.Duration = in.Duration + out.DurationMilliseconds = (*int64)(unsafe.Pointer(in.DurationMilliseconds)) out.DurationFrom = (*ExpressionFromSource)(unsafe.Pointer(in.DurationFrom)) - out.JitterDuration = (*v1.Duration)(unsafe.Pointer(in.JitterDuration)) + out.JitterDurationMilliseconds = (*int64)(unsafe.Pointer(in.JitterDurationMilliseconds)) out.JitterDurationFrom = (*ExpressionFromSource)(unsafe.Pointer(in.JitterDurationFrom)) return nil } diff --git a/pkg/apis/internalversion/zz_generated.deepcopy.go b/pkg/apis/internalversion/zz_generated.deepcopy.go index abaad503d..cbd99b352 100644 --- a/pkg/apis/internalversion/zz_generated.deepcopy.go +++ b/pkg/apis/internalversion/zz_generated.deepcopy.go @@ -22,7 +22,6 @@ limitations under the License. package internalversion import ( - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -280,15 +279,19 @@ func (in *Stage) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StageDelay) DeepCopyInto(out *StageDelay) { *out = *in - out.Duration = in.Duration + if in.DurationMilliseconds != nil { + in, out := &in.DurationMilliseconds, &out.DurationMilliseconds + *out = new(int64) + **out = **in + } if in.DurationFrom != nil { in, out := &in.DurationFrom, &out.DurationFrom *out = new(ExpressionFromSource) **out = **in } - if in.JitterDuration != nil { - in, out := &in.JitterDuration, &out.JitterDuration - *out = new(v1.Duration) + if in.JitterDurationMilliseconds != nil { + in, out := &in.JitterDurationMilliseconds, &out.JitterDurationMilliseconds + *out = new(int64) **out = **in } if in.JitterDurationFrom != nil { diff --git a/pkg/apis/v1alpha1/stage_types.go b/pkg/apis/v1alpha1/stage_types.go index 8cd9d116a..ec8164ff6 100644 --- a/pkg/apis/v1alpha1/stage_types.go +++ b/pkg/apis/v1alpha1/stage_types.go @@ -63,19 +63,19 @@ type StageResourceRef struct { // StageDelay describes the delay time before going to next. type StageDelay struct { - // Duration indicates the stage delay time. - // If JitterDuration is less than Duration, then JitterDuration is used. - Duration metav1.Duration `json:"duration"` + // DurationMilliseconds indicates the stage delay time. + // If JitterDurationMilliseconds is less than DurationMilliseconds, then JitterDurationMilliseconds is used. + DurationMilliseconds *int64 `json:"durationMilliseconds,omitempty"` // DurationFrom is the expression used to get the value. - // If it is a time.Time type, getting the value will be minus time.Now() to get Duration + // If it is a time.Time type, getting the value will be minus time.Now() to get DurationMilliseconds // If it is a string type, the value get will be parsed by time.ParseDuration. DurationFrom *ExpressionFromSource `json:"durationFrom,omitempty"` - // JitterDuration is the duration plus an additional amount chosen uniformly - // at random from the interval between Duration and JitterDuration. - JitterDuration *metav1.Duration `json:"jitterDuration,omitempty"` + // JitterDurationMilliseconds is the duration plus an additional amount chosen uniformly + // at random from the interval between DurationMilliseconds and JitterDurationMilliseconds. + JitterDurationMilliseconds *int64 `json:"jitterDurationMilliseconds,omitempty"` // JitterDurationFrom is the expression used to get the value. - // If it is a time.Time type, getting the value will be minus time.Now() to get JitterDuration + // If it is a time.Time type, getting the value will be minus time.Now() to get JitterDurationMilliseconds // If it is a string type, the value get will be parsed by time.ParseDuration. JitterDurationFrom *ExpressionFromSource `json:"jitterDurationFrom,omitempty"` } diff --git a/pkg/apis/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/v1alpha1/zz_generated.deepcopy.go index fff6e42c8..f51287641 100644 --- a/pkg/apis/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/v1alpha1/zz_generated.deepcopy.go @@ -22,7 +22,6 @@ limitations under the License. package v1alpha1 import ( - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -332,15 +331,19 @@ func (in *Stage) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *StageDelay) DeepCopyInto(out *StageDelay) { *out = *in - out.Duration = in.Duration + if in.DurationMilliseconds != nil { + in, out := &in.DurationMilliseconds, &out.DurationMilliseconds + *out = new(int64) + **out = **in + } if in.DurationFrom != nil { in, out := &in.DurationFrom, &out.DurationFrom *out = new(ExpressionFromSource) **out = **in } - if in.JitterDuration != nil { - in, out := &in.JitterDuration, &out.JitterDuration - *out = new(v1.Duration) + if in.JitterDurationMilliseconds != nil { + in, out := &in.JitterDurationMilliseconds, &out.JitterDurationMilliseconds + *out = new(int64) **out = **in } if in.JitterDurationFrom != nil { diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 4280b70e4..ed2851f73 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -44,6 +44,12 @@ func TestConfig(t *testing.T) { APIVersion: v1alpha1.GroupVersion.String(), }, }, + &internalversion.Stage{ + TypeMeta: metav1.TypeMeta{ + Kind: v1alpha1.StageKind, + APIVersion: v1alpha1.GroupVersion.String(), + }, + }, } err := Save(ctx, config, data) if err != nil { diff --git a/pkg/kwok/controllers/lifecycle.go b/pkg/kwok/controllers/lifecycle.go index 952203269..8538e539f 100644 --- a/pkg/kwok/controllers/lifecycle.go +++ b/pkg/kwok/controllers/lifecycle.go @@ -30,6 +30,7 @@ import ( "sigs.k8s.io/kwok/pkg/apis/internalversion" "sigs.k8s.io/kwok/pkg/utils/expression" + "sigs.k8s.io/kwok/pkg/utils/format" ) func NewStagesFromYaml(data []byte) ([]*internalversion.Stage, error) { @@ -146,19 +147,24 @@ func newLifecycleFromStage(s *internalversion.Stage) (*LifecycleStage, error) { if delay.DurationFrom != nil { durationFrom = &delay.DurationFrom.ExpressionFrom } - duration, err := expression.NewDurationFrom(&delay.Duration.Duration, durationFrom) + var delayDuration time.Duration + if delay.DurationMilliseconds != nil { + delayDuration = time.Duration(*delay.DurationMilliseconds) * time.Millisecond + } + duration, err := expression.NewDurationFrom(&delayDuration, durationFrom) if err != nil { return nil, err } stage.duration = duration - if delay.JitterDuration != nil || delay.JitterDurationFrom != nil { + + if delay.JitterDurationMilliseconds != nil || delay.JitterDurationFrom != nil { var jitterDurationFrom *string if delay.JitterDurationFrom != nil { jitterDurationFrom = &delay.JitterDurationFrom.ExpressionFrom } var jitterDuration *time.Duration - if delay.JitterDuration != nil { - jitterDuration = &delay.JitterDuration.Duration + if delay.JitterDurationMilliseconds != nil { + jitterDuration = format.Ptr(time.Duration(*delay.JitterDurationMilliseconds) * time.Millisecond) } jitterDurationGetter, err := expression.NewDurationFrom(jitterDuration, jitterDurationFrom) if err != nil { diff --git a/site/content/en/docs/user/stages-configuration.md b/site/content/en/docs/user/stages-configuration.md index b94a69d27..50d17fae9 100644 --- a/site/content/en/docs/user/stages-configuration.md +++ b/site/content/en/docs/user/stages-configuration.md @@ -33,10 +33,10 @@ spec: values: - delay: - duration: + durationMilliseconds: durationFrom: expressionFrom: - jitterDuration: + jitterDurationMilliseconds: jitterDurationFrom: expressionFrom: next: diff --git a/stages/node-fast.yaml b/stages/node-fast.yaml index fdaeaa8db..a9eb14f08 100644 --- a/stages/node-fast.yaml +++ b/stages/node-fast.yaml @@ -110,8 +110,8 @@ spec: values: - Running delay: - duration: 20s - jitterDuration: 25s + durationMilliseconds: 20000 + jitterDurationMilliseconds: 25000 next: statusTemplate: | {{ $now := Now }} diff --git a/stages/pod-general.yaml b/stages/pod-general.yaml index fbaf1ce34..a0efebb0e 100644 --- a/stages/pod-general.yaml +++ b/stages/pod-general.yaml @@ -14,8 +14,8 @@ spec: operator: 'DoesNotExist' weight: 1 delay: - duration: 1s - jitterDuration: 5s + durationMilliseconds: 1000 + jitterDurationMilliseconds: 5000 next: event: type: Normal @@ -122,8 +122,8 @@ spec: operator: 'Exists' weight: 1 delay: - duration: 1s - jitterDuration: 5s + durationMilliseconds: 1000 + jitterDurationMilliseconds: 5000 next: statusTemplate: | {{ $now := Now }} @@ -165,8 +165,8 @@ spec: operator: 'Exists' weight: 1 delay: - duration: 1s - jitterDuration: 5s + durationMilliseconds: 1000 + jitterDurationMilliseconds: 5000 next: statusTemplate: | {{ $now := Now }} @@ -229,8 +229,8 @@ spec: - 'True' weight: 1 delay: - duration: 1s - jitterDuration: 5s + durationMilliseconds: 1000 + jitterDurationMilliseconds: 5000 next: delete: false statusTemplate: | @@ -289,8 +289,8 @@ spec: - 'Job' weight: 1 delay: - duration: 1s - jitterDuration: 5s + durationMilliseconds: 1000 + jitterDurationMilliseconds: 5000 next: delete: false statusTemplate: | @@ -331,8 +331,8 @@ spec: - 'kwok.x-k8s.io/fake' weight: 1 delay: - duration: 1s - jitterDuration: 5s + durationMilliseconds: 1000 + jitterDurationMilliseconds: 5000 next: finalizers: remove: @@ -358,7 +358,7 @@ spec: operator: 'DoesNotExist' weight: 1 delay: - duration: 1s + durationMilliseconds: 1000 jitterDurationFrom: expressionFrom: '.metadata.deletionTimestamp' next: