/
graphtool.go
60 lines (54 loc) · 1.33 KB
/
graphtool.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package main
import (
"github.com/Sirupsen/logrus"
"github.com/docker/docker/daemon/graphdriver"
_ "github.com/docker/docker/daemon/graphdriver/aufs"
_ "github.com/docker/docker/daemon/graphdriver/overlay"
"github.com/docker/docker/graph"
"github.com/docker/docker/image"
)
type GraphTool struct {
DockerRoot string
graphDriver graphdriver.Driver
graphHandler *graph.Graph
logger *logrus.Logger
}
// NewGraphTool create new graphtool handler
func NewGraphTool(dockerRoot string) *GraphTool {
return &GraphTool{
DockerRoot: dockerRoot,
logger: logrus.WithFields(
logrus.Fields{
"docker_root": dockerRoot,
},
).Logger,
}
}
// initDriver ...
func (g *GraphTool) InitDriver() error {
var err error
g.graphDriver, err = graphdriver.New(g.DockerRoot, make([]string, 0))
if err != nil {
return err
}
g.graphHandler, err = graph.NewGraph(g.DockerRoot+"/graph", g.graphDriver)
if err != nil {
return err
}
return nil
}
// lookupImage ...
func (g *GraphTool) LookupImage(imageName string) (*image.Image, error) {
tagCfg := &graph.TagStoreConfig{
Graph: g.graphHandler,
}
tagStore, err := graph.NewTagStore(g.DockerRoot+"/repositories-"+g.graphDriver.String(), tagCfg)
if err != nil {
return nil, err
}
image, err := tagStore.LookupImage(imageName)
if err != nil {
return nil, err
}
return image, err
}