Skip to content

Commit defa52b

Browse files
cpuguy83thaJeztah
authored andcommitted
stacks: Add support for start interval
Signed-off-by: Brian Goff <cpuguy83@gmail.com> Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
1 parent 9df7be5 commit defa52b

8 files changed

Lines changed: 45 additions & 28 deletions

File tree

cli/compose/convert/service.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,8 @@ func convertHealthcheck(healthcheck *composetypes.HealthCheckConfig) (*container
436436
return nil, nil
437437
}
438438
var (
439-
timeout, interval, startPeriod time.Duration
440-
retries int
439+
timeout, interval, startPeriod, startInterval time.Duration
440+
retries int
441441
)
442442
if healthcheck.Disable {
443443
if len(healthcheck.Test) != 0 {
@@ -457,15 +457,19 @@ func convertHealthcheck(healthcheck *composetypes.HealthCheckConfig) (*container
457457
if healthcheck.StartPeriod != nil {
458458
startPeriod = time.Duration(*healthcheck.StartPeriod)
459459
}
460+
if healthcheck.StartInterval != nil {
461+
startInterval = time.Duration(*healthcheck.StartInterval)
462+
}
460463
if healthcheck.Retries != nil {
461464
retries = int(*healthcheck.Retries)
462465
}
463466
return &container.HealthConfig{
464-
Test: healthcheck.Test,
465-
Timeout: timeout,
466-
Interval: interval,
467-
Retries: retries,
468-
StartPeriod: startPeriod,
467+
Test: healthcheck.Test,
468+
Timeout: timeout,
469+
Interval: interval,
470+
Retries: retries,
471+
StartPeriod: startPeriod,
472+
StartInterval: startInterval,
469473
}, nil
470474
}
471475

cli/compose/convert/service_test.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,17 +124,24 @@ func TestConvertHealthcheck(t *testing.T) {
124124
retries := uint64(10)
125125
timeout := composetypes.Duration(30 * time.Second)
126126
interval := composetypes.Duration(2 * time.Millisecond)
127+
startPeriod := composetypes.Duration(time.Minute)
128+
startInterval := composetypes.Duration(1 * time.Second)
129+
127130
source := &composetypes.HealthCheckConfig{
128-
Test: []string{"EXEC", "touch", "/foo"},
129-
Timeout: &timeout,
130-
Interval: &interval,
131-
Retries: &retries,
131+
Test: []string{"EXEC", "touch", "/foo"},
132+
Timeout: &timeout,
133+
Interval: &interval,
134+
Retries: &retries,
135+
StartPeriod: &startPeriod,
136+
StartInterval: &startInterval,
132137
}
133138
expected := &container.HealthConfig{
134-
Test: source.Test,
135-
Timeout: time.Duration(timeout),
136-
Interval: time.Duration(interval),
137-
Retries: 10,
139+
Test: source.Test,
140+
Timeout: time.Duration(timeout),
141+
Interval: time.Duration(interval),
142+
StartPeriod: time.Duration(startPeriod),
143+
StartInterval: time.Duration(startInterval),
144+
Retries: 10,
138145
}
139146

140147
healthcheck, err := convertHealthcheck(source)

cli/compose/loader/full-example.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ services:
158158
timeout: 1s
159159
retries: 5
160160
start_period: 15s
161+
start_interval: 1s
161162

162163
# Any valid image reference - repo, tag, id, sha
163164
image: redis

cli/compose/loader/full-struct_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,12 @@ func services(workingDir, homeDir string) []types.ServiceConfig {
154154
"x-foo": "bar",
155155
},
156156
HealthCheck: &types.HealthCheckConfig{
157-
Test: types.HealthCheckTest([]string{"CMD-SHELL", "echo \"hello world\""}),
158-
Interval: durationPtr(10 * time.Second),
159-
Timeout: durationPtr(1 * time.Second),
160-
Retries: uint64Ptr(5),
161-
StartPeriod: durationPtr(15 * time.Second),
157+
Test: types.HealthCheckTest([]string{"CMD-SHELL", "echo \"hello world\""}),
158+
Interval: durationPtr(10 * time.Second),
159+
Timeout: durationPtr(1 * time.Second),
160+
Retries: uint64Ptr(5),
161+
StartPeriod: durationPtr(15 * time.Second),
162+
StartInterval: durationPtr(1 * time.Second),
162163
},
163164
Hostname: "foo",
164165
Image: "redis",

cli/compose/loader/testdata/full-example.json.golden

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,8 @@
252252
"timeout": "1s",
253253
"interval": "10s",
254254
"retries": 5,
255-
"start_period": "15s"
255+
"start_period": "15s",
256+
"start_interval": "1s"
256257
},
257258
"image": "redis",
258259
"ipc": "host",

cli/compose/loader/testdata/full-example.yaml.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ services:
126126
interval: 10s
127127
retries: 5
128128
start_period: 15s
129+
start_interval: 1s
129130
image: redis
130131
ipc: host
131132
labels:

cli/compose/schema/data/config_schema_v3.12.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,8 @@
346346
]
347347
},
348348
"timeout": {"type": "string", "format": "duration"},
349-
"start_period": {"type": "string", "format": "duration"}
349+
"start_period": {"type": "string", "format": "duration"},
350+
"start_interval": {"type": "string", "format": "duration"}
350351
}
351352
},
352353
"deployment": {

cli/compose/types/types.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -276,12 +276,13 @@ type DeployConfig struct {
276276

277277
// HealthCheckConfig the healthcheck configuration for a service
278278
type HealthCheckConfig struct {
279-
Test HealthCheckTest `yaml:",omitempty" json:"test,omitempty"`
280-
Timeout *Duration `yaml:",omitempty" json:"timeout,omitempty"`
281-
Interval *Duration `yaml:",omitempty" json:"interval,omitempty"`
282-
Retries *uint64 `yaml:",omitempty" json:"retries,omitempty"`
283-
StartPeriod *Duration `mapstructure:"start_period" yaml:"start_period,omitempty" json:"start_period,omitempty"`
284-
Disable bool `yaml:",omitempty" json:"disable,omitempty"`
279+
Test HealthCheckTest `yaml:",omitempty" json:"test,omitempty"`
280+
Timeout *Duration `yaml:",omitempty" json:"timeout,omitempty"`
281+
Interval *Duration `yaml:",omitempty" json:"interval,omitempty"`
282+
Retries *uint64 `yaml:",omitempty" json:"retries,omitempty"`
283+
StartPeriod *Duration `mapstructure:"start_period" yaml:"start_period,omitempty" json:"start_period,omitempty"`
284+
StartInterval *Duration `mapstructure:"start_interval" yaml:"start_interval,omitempty" json:"start_interval,omitempty"`
285+
Disable bool `yaml:",omitempty" json:"disable,omitempty"`
285286
}
286287

287288
// HealthCheckTest is the command run to test the health of a service

0 commit comments

Comments
 (0)