// Render produces a container graph where the the latest metadata contains the // container image name, if found. func (r containerWithImageNameRenderer) Render(rpt report.Report, dct Decorator) report.Nodes { containers := r.Renderer.Render(rpt, dct) images := SelectContainerImage.Render(rpt, dct) outputs := report.Nodes{} for id, c := range containers { outputs[id] = c imageID, ok := c.Latest.Lookup(docker.ImageID) if !ok { continue } image, ok := images[report.MakeContainerImageNodeID(imageID)] if !ok { continue } imageName, ok := image.Latest.Lookup(docker.ImageName) if !ok { continue } imageNameWithoutVersion := docker.ImageNameWithoutVersion(imageName) imageNodeID := report.MakeContainerImageNodeID(imageNameWithoutVersion) output := c.Copy() output = propagateLatest(docker.ImageName, image, output) output = propagateLatest(docker.ImageLabelPrefix+"works.weave.role", image, output) output.Parents = output.Parents. Delete(report.ContainerImage). Add(report.ContainerImage, report.MakeStringSet(imageNodeID)) outputs[id] = output } return outputs }
func isPauseContainer(n report.Node, rpt report.Report) bool { containerImageIDs, ok := n.Parents.Lookup(report.ContainerImage) if !ok { return false } for _, imageNodeID := range containerImageIDs { imageNode, ok := rpt.ContainerImage.Nodes[imageNodeID] if !ok { continue } imageName, ok := imageNode.Latest.Lookup(docker.ImageName) if !ok { continue } if docker.ImageNameWithoutVersion(imageName) == "google_containers/pause" { return true } } return false }
// MapContainerImage2Name ignores image versions func MapContainerImage2Name(n report.Node, _ report.Networks) report.Nodes { // Propagate all pseudo nodes if n.Topology == Pseudo { return report.Nodes{n.ID: n} } imageName, ok := n.Latest.Lookup(docker.ImageName) if !ok { return report.Nodes{} } imageNameWithoutVersion := docker.ImageNameWithoutVersion(imageName) output := n.Copy() output.ID = report.MakeContainerImageNodeID(imageNameWithoutVersion) if imageID, ok := report.ParseContainerImageNodeID(n.ID); ok { output.Sets = output.Sets.Add(docker.ImageID, report.EmptyStringSet.Add(imageID)) } return report.Nodes{output.ID: output} }