diff --git a/probe/docker/container.go b/probe/docker/container.go index ca7e0e928..5a86f726f 100644 --- a/probe/docker/container.go +++ b/probe/docker/container.go @@ -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] +} diff --git a/probe/docker/controls_test.go b/probe/docker/controls_test.go index 2a3aafe1b..afb157056 100644 --- a/probe/docker/controls_test.go +++ b/probe/docker/controls_test.go @@ -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) + } + } +} diff --git a/probe/docker/registry.go b/probe/docker/registry.go index 04426443a..015c20808 100644 --- a/probe/docker/registry.go +++ b/probe/docker/registry.go @@ -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] -} diff --git a/probe/docker/registry_test.go b/probe/docker/registry_test.go index a77e55cb9..0e8e4bdcd 100644 --- a/probe/docker/registry_test.go +++ b/probe/docker/registry_test.go @@ -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) - } - } -} diff --git a/probe/docker/reporter.go b/probe/docker/reporter.go index b9c0e0e32..02def3541 100644 --- a/probe/docker/reporter.go +++ b/probe/docker/reporter.go @@ -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) diff --git a/probe/docker/tagger.go b/probe/docker/tagger.go index c224d0912..6f358920b 100644 --- a/probe/docker/tagger.go +++ b/probe/docker/tagger.go @@ -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))), ) diff --git a/render/container.go b/render/container.go index d304e792f..5228136df 100644 --- a/render/container.go +++ b/render/container.go @@ -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 } diff --git a/render/detailed/summary.go b/render/detailed/summary.go index 960e102c5..d2b223084 100644 --- a/render/detailed/summary.go +++ b/render/detailed/summary.go @@ -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: