From af75b49cd4bdb942b7488b834e7418fff3241d0b Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Wed, 11 Oct 2023 16:35:51 +0000 Subject: [PATCH] stacks: Add support for start interval Signed-off-by: Brian Goff --- cli/compose/convert/service.go | 18 +++++++++++------- cli/compose/convert/service_test.go | 23 +++++++++++++++-------- cli/compose/types/types.go | 13 +++++++------ 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/cli/compose/convert/service.go b/cli/compose/convert/service.go index bb9255d581e8..eb5e5066d411 100644 --- a/cli/compose/convert/service.go +++ b/cli/compose/convert/service.go @@ -436,8 +436,8 @@ func convertHealthcheck(healthcheck *composetypes.HealthCheckConfig) (*container return nil, nil } var ( - timeout, interval, startPeriod time.Duration - retries int + timeout, interval, startPeriod, startInterval time.Duration + retries int ) if healthcheck.Disable { if len(healthcheck.Test) != 0 { @@ -457,15 +457,19 @@ func convertHealthcheck(healthcheck *composetypes.HealthCheckConfig) (*container if healthcheck.StartPeriod != nil { startPeriod = time.Duration(*healthcheck.StartPeriod) } + if healthcheck.StartInterval != nil { + startInterval = time.Duration(*healthcheck.StartInterval) + } if healthcheck.Retries != nil { retries = int(*healthcheck.Retries) } return &container.HealthConfig{ - Test: healthcheck.Test, - Timeout: timeout, - Interval: interval, - Retries: retries, - StartPeriod: startPeriod, + Test: healthcheck.Test, + Timeout: timeout, + Interval: interval, + Retries: retries, + StartPeriod: startPeriod, + StartInterval: startInterval, }, nil } diff --git a/cli/compose/convert/service_test.go b/cli/compose/convert/service_test.go index 4d48acc3eae6..7e415ed3ce87 100644 --- a/cli/compose/convert/service_test.go +++ b/cli/compose/convert/service_test.go @@ -124,17 +124,24 @@ func TestConvertHealthcheck(t *testing.T) { retries := uint64(10) timeout := composetypes.Duration(30 * time.Second) interval := composetypes.Duration(2 * time.Millisecond) + startPeriod := composetypes.Duration(time.Minute) + startInterval := composetypes.Duration(2 * time.Second) + source := &composetypes.HealthCheckConfig{ - Test: []string{"EXEC", "touch", "/foo"}, - Timeout: &timeout, - Interval: &interval, - Retries: &retries, + Test: []string{"EXEC", "touch", "/foo"}, + Timeout: &timeout, + Interval: &interval, + Retries: &retries, + StartPeriod: &startPeriod, + StartInterval: &startInterval, } expected := &container.HealthConfig{ - Test: source.Test, - Timeout: time.Duration(timeout), - Interval: time.Duration(interval), - Retries: 10, + Test: source.Test, + Timeout: time.Duration(timeout), + Interval: time.Duration(interval), + StartPeriod: time.Duration(startPeriod), + StartInterval: time.Duration(startInterval), + Retries: 10, } healthcheck, err := convertHealthcheck(source) diff --git a/cli/compose/types/types.go b/cli/compose/types/types.go index ed2e10e85b77..ce9ba2b7f44d 100644 --- a/cli/compose/types/types.go +++ b/cli/compose/types/types.go @@ -276,12 +276,13 @@ type DeployConfig struct { // HealthCheckConfig the healthcheck configuration for a service type HealthCheckConfig struct { - Test HealthCheckTest `yaml:",omitempty" json:"test,omitempty"` - Timeout *Duration `yaml:",omitempty" json:"timeout,omitempty"` - Interval *Duration `yaml:",omitempty" json:"interval,omitempty"` - Retries *uint64 `yaml:",omitempty" json:"retries,omitempty"` - StartPeriod *Duration `mapstructure:"start_period" yaml:"start_period,omitempty" json:"start_period,omitempty"` - Disable bool `yaml:",omitempty" json:"disable,omitempty"` + Test HealthCheckTest `yaml:",omitempty" json:"test,omitempty"` + Timeout *Duration `yaml:",omitempty" json:"timeout,omitempty"` + Interval *Duration `yaml:",omitempty" json:"interval,omitempty"` + Retries *uint64 `yaml:",omitempty" json:"retries,omitempty"` + StartPeriod *Duration `mapstructure:"start_period" yaml:"start_period,omitempty" json:"start_period,omitempty"` + StartInterval *Duration `yaml:",omitempty" json:"start_interval,omitempty"` + Disable bool `yaml:",omitempty" json:"disable,omitempty"` } // HealthCheckTest is the command run to test the health of a service