1
0
mirror of https://github.com/containrrr/watchtower.git synced 2025-01-17 18:26:19 +02:00

Support Zodiac-based deployments

Since Zodiac always uses image IDs for deployments we can relay on the
standard container image field to determine the image that was used to
start the container. Luckily, Zodiac writes the original image name to a
label in the container metadata. If we find that Zodiac-specific label
on a running container we will use the associated value when trying to
determine if the container's image has changed.
This commit is contained in:
Brian DeHamer 2015-08-12 20:49:45 +00:00
parent a238521fc4
commit 7cf2d7f1d8
2 changed files with 20 additions and 1 deletions

View File

@ -10,6 +10,7 @@ import (
const (
watchtowerLabel = "com.centurylinklabs.watchtower"
signalLabel = "com.centurylinklabs.watchtower.stop-signal"
zodiacLabel = "com.centurylinklabs.zodiac.original-image"
)
// NewContainer returns a new Container instance instantiated with the
@ -49,7 +50,11 @@ func (c Container) ImageID() string {
// container. If the original image was specified without a particular tag, the
// "latest" tag is assumed.
func (c Container) ImageName() string {
imageName := c.containerInfo.Config.Image
// Compatibility w/ Zodiac deployments
imageName, ok := c.containerInfo.Config.Labels[zodiacLabel]
if !ok {
imageName = c.containerInfo.Config.Image
}
if !strings.Contains(imageName, ":") {
imageName = fmt.Sprintf("%s:latest", imageName)
@ -135,6 +140,7 @@ func (c Container) runtimeConfig() *dockerclient.ContainerConfig {
config.ExposedPorts[p] = struct{}{}
}
config.Image = c.ImageName()
return config
}

View File

@ -57,6 +57,19 @@ func TestImageName_Untagged(t *testing.T) {
assert.Equal(t, "foo:latest", c.ImageName())
}
func TestImageName_Zodiac(t *testing.T) {
c := Container{
containerInfo: &dockerclient.ContainerInfo{
Config: &dockerclient.ContainerConfig{
Labels: map[string]string{"com.centurylinklabs.zodiac.original-image": "foo"},
Image: "1234567890",
},
},
}
assert.Equal(t, "foo:latest", c.ImageName())
}
func TestLinks(t *testing.T) {
c := Container{
containerInfo: &dockerclient.ContainerInfo{