9
"github.com/blang/semver/v4"
10
"github.com/containers/image/v5/pkg/compression"
11
"github.com/containers/image/v5/types"
12
"github.com/containers/podman/v5/pkg/machine/define"
13
"github.com/containers/podman/v5/version"
14
"github.com/containers/storage/pkg/archive"
15
"github.com/sirupsen/logrus"
18
type OSVersion struct {
22
type Disker interface {
34
OCIDir OCIKind = "oci-dir"
35
OCIRegistry OCIKind = "docker"
36
OCIUnknown OCIKind = "unknown"
39
func (o OCIKind) String() string {
44
return string(OCIRegistry)
46
return string(OCIUnknown)
49
func (o OCIKind) IsOCIDir() bool {
53
func StripOCIReference(input string) string {
54
return strings.TrimPrefix(input, "docker://")
57
func getVersion() *OSVersion {
62
func (o *OSVersion) majorMinor() string {
63
return fmt.Sprintf("%d.%d", o.Major, o.Minor)
66
func unpackOCIDir(ociTb, machineImageDir string) (*define.VMFile, error) {
67
imageFileName, err := findTarComponent(ociTb)
72
unpackedFileName := filepath.Join(machineImageDir, imageFileName)
74
f, err := os.Open(ociTb)
79
if err := f.Close(); err != nil {
84
uncompressedReader, _, err := compression.AutoDecompress(f)
90
if err := uncompressedReader.Close(); err != nil {
95
logrus.Debugf("untarring %q to %q", ociTb, machineImageDir)
96
if err := archive.Untar(uncompressedReader, machineImageDir, &archive.TarOptions{
102
return define.NewMachineFile(unpackedFileName, nil)
105
func localOCIDiskImageDir(blobDirPath string, localBlob *types.BlobInfo) string {
106
return filepath.Join(blobDirPath, "blobs", "sha256", localBlob.Digest.Hex())
109
func finalFQImagePathName(vmName, imageName string) string {
110
// imageName here is fully qualified. we need to break
111
// it apart and add the vmname
112
baseDir, filename := filepath.Split(imageName)
113
return filepath.Join(baseDir, fmt.Sprintf("%s-%s", vmName, filename))