dive-zfs/dive/get_image_resolver.go
norohind 534bb92185
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
PoC: zfs support
2025-02-27 21:28:51 +01:00

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")
}