Skip to content

Commit

Permalink
fix: use new healthcheck config if not overridden (#1801)
Browse files Browse the repository at this point in the history
  • Loading branch information
piksel authored Oct 21, 2023
1 parent 72e437f commit 40b8c77
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 1 deletion.
21 changes: 21 additions & 0 deletions pkg/container/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,27 @@ func (c Container) GetCreateConfig() *dockercontainer.Config {
}
}

// Clear HEALTHCHECK configuration (if default)
if util.SliceEqual(config.Healthcheck.Test, imageConfig.Healthcheck.Test) {
config.Healthcheck.Test = nil
}

if config.Healthcheck.Retries == imageConfig.Healthcheck.Retries {
config.Healthcheck.Retries = 0
}

if config.Healthcheck.Interval == imageConfig.Healthcheck.Interval {
config.Healthcheck.Interval = 0
}

if config.Healthcheck.Timeout == imageConfig.Healthcheck.Timeout {
config.Healthcheck.Timeout = 0
}

if config.Healthcheck.StartPeriod == imageConfig.Healthcheck.StartPeriod {
config.Healthcheck.StartPeriod = 0
}

config.Env = util.SliceSubtract(config.Env, imageConfig.Env)

config.Labels = util.StringMapSubtract(config.Labels, imageConfig.Labels)
Expand Down
15 changes: 14 additions & 1 deletion pkg/container/container_mock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ func MockContainer(updates ...MockContainerUpdate) *Container {
},
}
image := types.ImageInspect{
ID: "image_id",
ID: "image_id",
Config: &dockerContainer.Config{},
}

for _, update := range updates {
Expand Down Expand Up @@ -64,3 +65,15 @@ func WithContainerState(state types.ContainerState) MockContainerUpdate {
cnt.State = &state
}
}

func WithHealthcheck(healthConfig dockerContainer.HealthConfig) MockContainerUpdate {
return func(cnt *types.ContainerJSON, img *types.ImageInspect) {
cnt.Config.Healthcheck = &healthConfig
}
}

func WithImageHealthcheck(healthConfig dockerContainer.HealthConfig) MockContainerUpdate {
return func(cnt *types.ContainerJSON, img *types.ImageInspect) {
img.Config.Healthcheck = &healthConfig
}
}
58 changes: 58 additions & 0 deletions pkg/container/container_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package container

import (
"github.com/containrrr/watchtower/pkg/types"
dc "github.com/docker/docker/api/types/container"
"github.com/docker/go-connections/nat"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
Expand Down Expand Up @@ -67,6 +68,63 @@ var _ = Describe("the container", func() {
})
})
})
Describe("GetCreateConfig", func() {
When("container healthcheck config is equal to image config", func() {
It("should return empty healthcheck values", func() {
c := MockContainer(WithHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
}), WithImageHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{}))

c = MockContainer(WithHealthcheck(dc.HealthConfig{
Timeout: 30,
}), WithImageHealthcheck(dc.HealthConfig{
Timeout: 30,
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{}))

c = MockContainer(WithHealthcheck(dc.HealthConfig{
StartPeriod: 30,
}), WithImageHealthcheck(dc.HealthConfig{
StartPeriod: 30,
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{}))

c = MockContainer(WithHealthcheck(dc.HealthConfig{
Retries: 30,
}), WithImageHealthcheck(dc.HealthConfig{
Retries: 30,
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{}))
})
})
When("container healthcheck config is different to image config", func() {
It("should return the container healthcheck values", func() {
c := MockContainer(WithHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
Interval: 30,
Timeout: 30,
StartPeriod: 10,
Retries: 2,
}), WithImageHealthcheck(dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "10s"},
Interval: 10,
Timeout: 60,
StartPeriod: 30,
Retries: 10,
}))
Expect(c.GetCreateConfig().Healthcheck).To(Equal(&dc.HealthConfig{
Test: []string{"/usr/bin/sleep", "1s"},
Interval: 30,
Timeout: 30,
StartPeriod: 10,
Retries: 2,
}))
})
})
})
When("asked for metadata", func() {
var c *Container
BeforeEach(func() {
Expand Down

0 comments on commit 40b8c77

Please sign in to comment.