Addressed @LiliC's feedback.

This commit is contained in:
Filip Barl
2018-05-16 17:26:50 +02:00
parent 183aaea950
commit bfb20a8f40
8 changed files with 51 additions and 53 deletions

View File

@@ -467,3 +467,27 @@ func ContainerIsStopped(c Container) bool {
state := c.StateString()
return (state != StateRunning && state != StateRestarting && state != StatePaused)
}
// splitImageName returns parts of the full image name (image name, image tag).
func splitImageName(imageName string) []string {
parts := strings.SplitN(imageName, "/", 3)
if len(parts) == 3 {
imageName = fmt.Sprintf("%s/%s", parts[1], parts[2])
}
return strings.SplitN(imageName, ":", 2)
}
// ImageNameWithoutTag splits the image name apart, returning the name
// without the version, if possible
func ImageNameWithoutTag(imageName string) string {
return splitImageName(imageName)[0]
}
// ImageNameTag splits the image name apart, returning the version tag, if possible
func ImageNameTag(imageName string) string {
imageNameParts := splitImageName(imageName)
if len(imageNameParts) < 2 {
return ""
}
return imageNameParts[1]
}

View File

@@ -104,3 +104,18 @@ func TestPipes(t *testing.T) {
}
})
}
func TestDockerImageName(t *testing.T) {
for _, input := range []struct{ in, name string }{
{"foo/bar", "foo/bar"},
{"foo/bar:baz", "foo/bar"},
{"reg:123/foo/bar:baz", "foo/bar"},
{"docker-registry.domain.name:5000/repo/image1:ver", "repo/image1"},
{"foo", "foo"},
} {
name := docker.ImageNameWithoutTag(input.in)
if name != input.name {
t.Fatalf("%s: %s != %s", input.in, name, input.name)
}
}
}

View File

@@ -1,8 +1,6 @@
package docker
import (
"fmt"
"strings"
"sync"
"time"
@@ -471,27 +469,3 @@ func (r *registry) WalkNetworks(f func(docker_client.Network)) {
f(network)
}
}
// ImageNameParts returns parts of the full image name (image name, image tag).
func ImageNameParts(name string) []string {
parts := strings.SplitN(name, "/", 3)
if len(parts) == 3 {
name = fmt.Sprintf("%s/%s", parts[1], parts[2])
}
return strings.SplitN(name, ":", 2)
}
// ImageNameWithoutVersion splits the image name apart, returning the name
// without the version, if possible
func ImageNameWithoutVersion(name string) string {
return ImageNameParts(name)[0]
}
// ImageNameVersion splits the image name apart, returning the version, if possible
func ImageNameVersion(name string) string {
imageNameParts := ImageNameParts(name)
if len(imageNameParts) < 2 {
return ""
}
return imageNameParts[1]
}

View File

@@ -515,18 +515,3 @@ func TestRegistryDelete(t *testing.T) {
}
})
}
func TestDockerImageName(t *testing.T) {
for _, input := range []struct{ in, name string }{
{"foo/bar", "foo/bar"},
{"foo/bar:baz", "foo/bar"},
{"reg:123/foo/bar:baz", "foo/bar"},
{"docker-registry.domain.name:5000/repo/image1:ver", "repo/image1"},
{"foo", "foo"},
} {
name := docker.ImageNameWithoutVersion(input.in)
if name != input.name {
t.Fatalf("%s: %s != %s", input.in, name, input.name)
}
}
}

View File

@@ -283,8 +283,8 @@ func (r *Reporter) containerImageTopology() report.Topology {
}
if len(image.RepoTags) > 0 {
imageFullName := image.RepoTags[0]
latests[ImageName] = ImageNameWithoutVersion(imageFullName)
latests[ImageTag] = ImageNameVersion(imageFullName)
latests[ImageName] = ImageNameWithoutTag(imageFullName)
latests[ImageTag] = ImageNameTag(imageFullName)
}
nodeID := report.MakeContainerImageNodeID(imageID)
node := report.MakeNodeWith(nodeID, latests)

View File

@@ -123,7 +123,7 @@ func (t *Tagger) tag(tree process.Tree, topology *report.Topology) {
// If we can work out the image name, add a parent tag for it
image, ok := t.registry.GetContainerImage(c.Image())
if ok && len(image.RepoTags) > 0 {
imageName := ImageNameWithoutVersion(image.RepoTags[0])
imageName := ImageNameWithoutTag(image.RepoTags[0])
node = node.WithParents(report.MakeSets().
Add(report.ContainerImage, report.MakeStringSet(report.MakeContainerImageNodeID(imageName))),
)

View File

@@ -140,8 +140,8 @@ func (r containerWithImageNameRenderer) Render(rpt report.Report) Nodes {
if !ok {
continue
}
imageNameWithoutVersion := docker.ImageNameWithoutVersion(imageName)
imageNodeID := report.MakeContainerImageNodeID(imageNameWithoutVersion)
imageNameWithoutTag := docker.ImageNameWithoutTag(imageName)
imageNodeID := report.MakeContainerImageNodeID(imageNameWithoutTag)
c = propagateLatest(docker.ImageName, image, c)
c = propagateLatest(docker.ImageTag, image, c)
@@ -324,8 +324,8 @@ func MapContainerImage2Name(n report.Node) report.Node {
return report.Node{}
}
imageNameWithoutVersion := docker.ImageNameWithoutVersion(imageName)
n.ID = report.MakeContainerImageNodeID(imageNameWithoutVersion)
imageNameWithoutTag := docker.ImageNameWithoutTag(imageName)
n.ID = report.MakeContainerImageNodeID(imageNameWithoutTag)
return n
}

View File

@@ -250,7 +250,7 @@ func containerNodeSummary(base BasicNodeSummary, n report.Node) BasicNodeSummary
base.Label = containerName
base.LabelMinor = hostName
if imageName != "" {
base.Rank = docker.ImageNameWithoutVersion(imageName)
base.Rank = docker.ImageNameWithoutTag(imageName)
} else if hostName != "" {
base.Rank = hostName
} else {
@@ -261,12 +261,12 @@ func containerNodeSummary(base BasicNodeSummary, n report.Node) BasicNodeSummary
func containerImageNodeSummary(base BasicNodeSummary, n report.Node) BasicNodeSummary {
var (
imageName, _ = n.Latest.Lookup(docker.ImageName)
imageNameWithoutVersion = docker.ImageNameWithoutVersion(imageName)
imageName, _ = n.Latest.Lookup(docker.ImageName)
imageNameWithoutTag = docker.ImageNameWithoutTag(imageName)
)
switch {
case imageNameWithoutVersion != "" && imageNameWithoutVersion != ImageNameNone:
base.Label = imageNameWithoutVersion
case imageNameWithoutTag != "" && imageNameWithoutTag != ImageNameNone:
base.Label = imageNameWithoutTag
case imageName != "" && imageName != ImageNameNone:
base.Label = imageName
default: