summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Goodman <wagoodman@gmail.com>2019-10-02 14:25:19 -0400
committerAlex Goodman <wagoodman@gmail.com>2019-10-02 14:25:19 -0400
commit485f5fc50078e05a62f3f915ecd9f2994017d7ae (patch)
treefaaa99a966f166e53470f9f9b45d0d9482d4723e
parent07af6d785b64c0cea3b2bdc344d3ad332c5a2675 (diff)
import podman runtime approach
-rw-r--r--dive/get_image_handler.go (renamed from dive/get_analyzer.go)8
-rw-r--r--dive/image/docker/image.go (renamed from dive/image/docker/analyzer.go)23
-rw-r--r--utils/docker.go37
3 files changed, 14 insertions, 54 deletions
diff --git a/dive/get_analyzer.go b/dive/get_image_handler.go
index 1b3d465..69c1f67 100644
--- a/dive/get_analyzer.go
+++ b/dive/get_image_handler.go
@@ -1,12 +1,14 @@
package dive
import (
+ "fmt"
"github.com/wagoodman/dive/dive/image"
"github.com/wagoodman/dive/dive/image/docker"
+ "net/url"
)
func GetAnalyzer(imageID string) image.Analyzer {
- // u, _ := url.Parse(imageID)
- // fmt.Printf("\n\nurl: %+v\n", u.Scheme)
- return docker.NewImageAnalyzer(imageID)
+ u, _ := url.Parse(imageID)
+ fmt.Printf("\n\nurl: %+v\n", u.Scheme)
+ return docker.NewDockerImage(imageID)
}
diff --git a/dive/image/docker/analyzer.go b/dive/image/docker/image.go
index 75fb0bf..adbd076 100644
--- a/dive/image/docker/analyzer.go
+++ b/dive/image/docker/image.go
@@ -19,7 +19,7 @@ import (
var dockerVersion string
-type imageAnalyzer struct {
+type dockerImage struct {
id string
client *client.Client
jsonFiles map[string][]byte
@@ -28,8 +28,8 @@ type imageAnalyzer struct {
layers []*dockerLayer
}
-func NewImageAnalyzer(imageId string) *imageAnalyzer {
- return &imageAnalyzer{
+func NewDockerImage(imageId string) *dockerImage {
+ return &dockerImage{
// store discovered json files in a map so we can read the image in one pass
jsonFiles: make(map[string][]byte),
layerMap: make(map[string]*filetree.FileTree),
@@ -37,7 +37,7 @@ func NewImageAnalyzer(imageId string) *imageAnalyzer {
}
}
-func (img *imageAnalyzer) Fetch() (io.ReadCloser, error) {
+func (img *dockerImage) Fetch() (io.ReadCloser, error) {
var err error
// pull the img if it does not exist
@@ -79,14 +79,9 @@ func (img *imageAnalyzer) Fetch() (io.ReadCloser, error) {
}
_, _, err = img.client.ImageInspectWithRaw(ctx, img.id)
if err != nil {
-
- if !utils.IsDockerClientAvailable() {
- return nil, fmt.Errorf("cannot find docker client executable")
- }
-
// don't use the API, the CLI has more informative output
fmt.Println("Image not available locally. Trying to pull '" + img.id + "'...")
- err = utils.RunDockerCmd("pull", img.id)
+ err = runDockerCmd("pull", img.id)
if err != nil {
return nil, err
}
@@ -100,7 +95,7 @@ func (img *imageAnalyzer) Fetch() (io.ReadCloser, error) {
return readCloser, nil
}
-func (img *imageAnalyzer) Parse(tarFile io.ReadCloser) error {
+func (img *dockerImage) Parse(tarFile io.ReadCloser) error {
tarReader := tar.NewReader(tarFile)
var currentLayer uint
@@ -144,7 +139,7 @@ func (img *imageAnalyzer) Parse(tarFile io.ReadCloser) error {
return nil
}
-func (img *imageAnalyzer) Analyze() (*image.AnalysisResult, error) {
+func (img *dockerImage) Analyze() (*image.AnalysisResult, error) {
img.trees = make([]*filetree.FileTree, 0)
manifest := newDockerImageManifest(img.jsonFiles["manifest.json"])
@@ -223,7 +218,7 @@ func (img *imageAnalyzer) Analyze() (*image.AnalysisResult, error) {
}, nil
}
-func (img *imageAnalyzer) processLayerTar(name string, layerIdx uint, reader *tar.Reader) error {
+func (img *dockerImage) processLayerTar(name string, layerIdx uint, reader *tar.Reader) error {
tree := filetree.NewFileTree()
tree.Name = name
@@ -245,7 +240,7 @@ func (img *imageAnalyzer) processLayerTar(name string, layerIdx uint, reader *ta
return nil
}
-func (img *imageAnalyzer) getFileList(tarReader *tar.Reader) ([]filetree.FileInfo, error) {
+func (img *dockerImage) getFileList(tarReader *tar.Reader) ([]filetree.FileInfo, error) {
var files []filetree.FileInfo
for {
diff --git a/utils/docker.go b/utils/docker.go
deleted file mode 100644
index b5b9c1c..0000000
--- a/utils/docker.go
+++ /dev/null
@@ -1,37 +0,0 @@
-package utils
-
-import (
- "os"
- "os/exec"
- "strings"
-)
-
-func IsDockerClientAvailable() bool {
- _, err := exec.LookPath("docker")
- return err == nil
-}
-
-// RunDockerCmd runs a given Docker command in the current tty
-func RunDockerCmd(cmdStr string, args ...string) error {
- allArgs := cleanArgs(append([]string{cmdStr}, args...))
-
- cmd := exec.Command("docker", allArgs...)
- cmd.Env = os.Environ()
-
- cmd.Stdout = os.Stdout
- cmd.Stderr = os.Stderr
- cmd.Stdin = os.Stdin
-
- return cmd.Run()
-}
-
-// cleanArgs trims the whitespace from the given set of strings.
-func cleanArgs(s []string) []string {
- var r []string
- for _, str := range s {
- if str != "" {
- r = append(r, strings.Trim(str, " "))
- }
- }
- return r
-}