Skip to content

Commit f35b3f1

Browse files
authored
Merge pull request #1463 from pendo324/refactor-vz-disk-conversion
refactor: vz disk conversion
2 parents f0282b2 + fd0ab46 commit f35b3f1

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

pkg/qemu/imgutil/imgutil.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ type Info struct {
1515
VSize int64 `json:"virtual-size,omitempty"`
1616
}
1717

18-
func QCOWToRaw(source string, dest string) error {
18+
func ConvertToRaw(source string, dest string) error {
1919
var stdout, stderr bytes.Buffer
20-
cmd := exec.Command("qemu-img", "convert", source, dest)
20+
cmd := exec.Command("qemu-img", "convert", "-O", "raw", source, dest)
2121
cmd.Stdout = &stdout
2222
cmd.Stderr = &stderr
2323
if err := cmd.Run(); err != nil {

pkg/vz/disk.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func EnsureDisk(driver *driver.BaseDriver) error {
6363
if out, err := cmd.CombinedOutput(); err != nil {
6464
return fmt.Errorf("failed to run %v: %q: %w", cmd.Args, string(out), err)
6565
}
66-
if err = imgutil.QCOWToRaw(diffDisk, diffDisk); err != nil {
66+
if err = imgutil.ConvertToRaw(diffDisk, diffDisk); err != nil {
6767
return fmt.Errorf("cannot convert qcow2 to raw for vz driver")
6868
}
6969
return nil

pkg/vz/vm_darwin.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"os"
1212
"path/filepath"
1313
"strconv"
14+
"strings"
1415
"syscall"
1516

1617
"github.com/Code-Hex/vz/v3"
@@ -356,20 +357,28 @@ func attachDisks(driver *driver.BaseDriver, vmConfig *vz.VirtualMachineConfigura
356357
return fmt.Errorf("failed to run detect disk format %q: %q", diskName, err)
357358
}
358359
if extraDiskFormat != "raw" {
360+
if strings.Contains(extraDiskFormat, string(os.PathSeparator)) {
361+
return fmt.Errorf(
362+
"failed to convert disk %q to raw for vz driver because extraDiskFormat %q contains a path separator %q",
363+
diskName,
364+
extraDiskFormat,
365+
os.PathSeparator,
366+
)
367+
}
359368
rawPath := fmt.Sprintf("%s.raw", extraDiskPath)
360-
qcow2Path := fmt.Sprintf("%s.qcow2", extraDiskPath)
361-
if err = imgutil.QCOWToRaw(extraDiskPath, rawPath); err != nil {
362-
return fmt.Errorf("failed to convert qcow2 disk %q to raw for vz driver: %w", diskName, err)
369+
oldFormatPath := fmt.Sprintf("%s.%s", extraDiskPath, extraDiskFormat)
370+
if err = imgutil.ConvertToRaw(extraDiskPath, rawPath); err != nil {
371+
return fmt.Errorf("failed to convert %s disk %q to raw for vz driver: %w", extraDiskFormat, diskName, err)
363372
}
364-
if err = os.Rename(extraDiskPath, qcow2Path); err != nil {
373+
if err = os.Rename(extraDiskPath, oldFormatPath); err != nil {
365374
return fmt.Errorf("failed to rename additional disk for vz driver: %w", err)
366375
}
367376
if err = os.Rename(rawPath, extraDiskPath); err != nil {
368377
return fmt.Errorf("failed to rename additional disk for vz driver: %w", err)
369378
}
370-
if err = os.Remove(qcow2Path); err != nil {
379+
if err = os.Remove(oldFormatPath); err != nil {
371380
logrus.Errorf("Failed to delete unused qcow2 additional disk %q."+
372-
"Disk is no longer needed by Lima and it can be removed manually.", qcow2Path)
381+
"Disk is no longer needed by Lima and it can be removed manually.", oldFormatPath)
373382
}
374383
}
375384

0 commit comments

Comments
 (0)