Add ability to overrider depending containers with special label (#489)

* Add ability to overrider depending containers with special label

* Add documentation of how to override container dependencies with special label
This commit is contained in:
Valentine Zavadsky 2020-04-24 14:41:04 +03:00 committed by GitHub
parent 7b0d311799
commit b32cb5d35d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 64 additions and 1 deletions

View file

@ -181,6 +181,42 @@ var _ = Describe("the container", func() {
Expect(imageName).To(Equal(name + ":latest"))
})
})
When("fetching container links", func() {
When("the depends on label is present", func() {
It("should fetch depending containers from it", func() {
c = mockContainerWithLabels(map[string]string{
"com.centurylinklabs.watchtower.depends-on": "postgres",
})
links := c.Links()
Expect(links).To(SatisfyAll(ContainElement("postgres"), HaveLen(1)))
})
It("should fetch depending containers if there are many", func() {
c = mockContainerWithLabels(map[string]string{
"com.centurylinklabs.watchtower.depends-on": "postgres,redis",
})
links := c.Links()
Expect(links).To(SatisfyAll(ContainElement("postgres"), ContainElement("redis"), HaveLen(2)))
})
It("should fetch depending containers if label is blank", func() {
c = mockContainerWithLabels(map[string]string{
"com.centurylinklabs.watchtower.depends-on": "",
})
links := c.Links()
Expect(links).To(HaveLen(0))
})
})
When("the depends on label is not present", func() {
It("should fetch depending containers from host config links", func() {
c = mockContainerWithLinks([]string{
"redis:test-containrrr",
"postgres:test-containrrr",
})
links := c.Links()
Expect(links).To(SatisfyAll(ContainElement("redis"), ContainElement("postgres"), HaveLen(2)))
})
})
})
})
})
@ -190,6 +226,23 @@ func mockContainerWithImageName(name string) *Container {
return container
}
func mockContainerWithLinks(links []string) *Container {
content := types.ContainerJSON{
ContainerJSONBase: &types.ContainerJSONBase{
ID: "container_id",
Image: "image",
Name: "test-containrrr",
HostConfig: &container.HostConfig{
Links: links,
},
},
Config: &container.Config{
Labels: map[string]string{},
},
}
return NewContainer(&content, nil)
}
func mockContainerWithLabels(labels map[string]string) *Container {
content := types.ContainerJSON{
ContainerJSONBase: &types.ContainerJSONBase{