Some checks failed
Validations / Static analysis (push) Failing after 32m53s
Validations / Unit tests (ubuntu-latest) (push) Failing after 10m54s
Validations / Build snapshot artifacts (push) Failing after 32m5s
Validations / Acceptance tests (Linux) (push) Has been skipped
Validations / Acceptance tests (Mac) (push) Has been skipped
Validations / Acceptance tests (Windows) (push) Has been skipped
83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
package dive
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/wagoodman/dive/dive/image/zfs"
|
|
"net/url"
|
|
"strings"
|
|
|
|
"github.com/wagoodman/dive/dive/image"
|
|
"github.com/wagoodman/dive/dive/image/docker"
|
|
"github.com/wagoodman/dive/dive/image/podman"
|
|
)
|
|
|
|
const (
|
|
SourceUnknown ImageSource = iota
|
|
SourceDockerEngine
|
|
SourcePodmanEngine
|
|
SourceDockerArchive
|
|
SourceZFS
|
|
)
|
|
|
|
type ImageSource int
|
|
|
|
var ImageSources = []string{SourceDockerEngine.String(), SourcePodmanEngine.String(), SourceDockerArchive.String()}
|
|
|
|
func (r ImageSource) String() string {
|
|
return [...]string{"unknown", "docker", "podman", "docker-archive", "zfs"}[r]
|
|
}
|
|
|
|
func ParseImageSource(r string) ImageSource {
|
|
|
|
switch r {
|
|
case SourceDockerEngine.String():
|
|
return SourceDockerEngine
|
|
case SourcePodmanEngine.String():
|
|
return SourcePodmanEngine
|
|
case SourceDockerArchive.String():
|
|
return SourceDockerArchive
|
|
case "docker-tar":
|
|
return SourceDockerArchive
|
|
default:
|
|
return SourceUnknown
|
|
}
|
|
}
|
|
|
|
func DeriveImageSource(image string) (ImageSource, string) {
|
|
u, err := url.Parse(image)
|
|
if err != nil {
|
|
return SourceUnknown, ""
|
|
}
|
|
|
|
imageSource := strings.TrimPrefix(image, u.Scheme+"://")
|
|
|
|
switch u.Scheme {
|
|
case SourceDockerEngine.String():
|
|
return SourceDockerEngine, imageSource
|
|
case SourcePodmanEngine.String():
|
|
return SourcePodmanEngine, imageSource
|
|
case SourceDockerArchive.String():
|
|
return SourceDockerArchive, imageSource
|
|
case "docker-tar":
|
|
return SourceDockerArchive, imageSource
|
|
case SourceZFS.String():
|
|
return SourceZFS, imageSource
|
|
}
|
|
return SourceUnknown, ""
|
|
}
|
|
|
|
func GetImageResolver(r ImageSource) (image.Resolver, error) {
|
|
switch r {
|
|
case SourceDockerEngine:
|
|
return docker.NewResolverFromEngine(), nil
|
|
case SourcePodmanEngine:
|
|
return podman.NewResolverFromEngine(), nil
|
|
case SourceDockerArchive:
|
|
return docker.NewResolverFromArchive(), nil
|
|
case SourceZFS:
|
|
return zfs.NewResolverFromEngine(), nil
|
|
}
|
|
|
|
return nil, fmt.Errorf("unable to determine image resolver")
|
|
}
|