39 lines
1016 B
Go
39 lines
1016 B
Go
![]() |
package graph
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
|
||
|
"github.com/docker/docker/engine"
|
||
|
"github.com/docker/docker/image"
|
||
|
)
|
||
|
|
||
|
func (s *TagStore) CmdViz(job *engine.Job) engine.Status {
|
||
|
images, _ := s.graph.Map()
|
||
|
if images == nil {
|
||
|
return engine.StatusOK
|
||
|
}
|
||
|
job.Stdout.Write([]byte("digraph docker {\n"))
|
||
|
|
||
|
var (
|
||
|
parentImage *image.Image
|
||
|
err error
|
||
|
)
|
||
|
for _, image := range images {
|
||
|
parentImage, err = image.GetParent()
|
||
|
if err != nil {
|
||
|
return job.Errorf("Error while getting parent image: %v", err)
|
||
|
}
|
||
|
if parentImage != nil {
|
||
|
job.Stdout.Write([]byte(" \"" + parentImage.ID + "\" -> \"" + image.ID + "\"\n"))
|
||
|
} else {
|
||
|
job.Stdout.Write([]byte(" base -> \"" + image.ID + "\" [style=invis]\n"))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for id, repos := range s.GetRepoRefs() {
|
||
|
job.Stdout.Write([]byte(" \"" + id + "\" [label=\"" + id + "\\n" + strings.Join(repos, "\\n") + "\",shape=box,fillcolor=\"paleturquoise\",style=\"filled,rounded\"];\n"))
|
||
|
}
|
||
|
job.Stdout.Write([]byte(" base [style=invisible]\n}\n"))
|
||
|
return engine.StatusOK
|
||
|
}
|