mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-15 12:59:06 +00:00
parent
7422b31b2c
commit
57394dfebf
@ -64,7 +64,7 @@ class Qcow2:
|
|||||||
|
|
||||||
self.magic, self.version, self.backing_file_offset, self.backing_file_size = struct.unpack_from(struct_format, content)
|
self.magic, self.version, self.backing_file_offset, self.backing_file_size = struct.unpack_from(struct_format, content)
|
||||||
|
|
||||||
if self.magic != 1363560955: # The first 4 bytes contain the characters 'Q', 'F', 'I' followed by 0xfb.
|
if self.magic != 1363560955: # The first 4 bytes contain the characters 'Q', 'F', 'I' followed by 0xfb.
|
||||||
raise Qcow2Error("Invalid magic for {}".format(self.path))
|
raise Qcow2Error("Invalid magic for {}".format(self.path))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -40,6 +40,7 @@ from ..base_vm import BaseVM
|
|||||||
from ...schemas.qemu import QEMU_OBJECT_SCHEMA, QEMU_PLATFORMS
|
from ...schemas.qemu import QEMU_OBJECT_SCHEMA, QEMU_PLATFORMS
|
||||||
from ...utils.asyncio import monitor_process
|
from ...utils.asyncio import monitor_process
|
||||||
from ...utils.images import md5sum
|
from ...utils.images import md5sum
|
||||||
|
from .qcow2 import Qcow2, Qcow2Error
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -1261,6 +1262,14 @@ class QemuVM(BaseVM):
|
|||||||
log.info("{} returned with {}".format(qemu_img_path, retcode))
|
log.info("{} returned with {}".format(qemu_img_path, retcode))
|
||||||
except (OSError, subprocess.SubprocessError) as e:
|
except (OSError, subprocess.SubprocessError) as e:
|
||||||
raise QemuError("Could not create {} disk image {}".format(disk_name, e))
|
raise QemuError("Could not create {} disk image {}".format(disk_name, e))
|
||||||
|
else:
|
||||||
|
# The disk exists we check if the clone work
|
||||||
|
try:
|
||||||
|
qcow2 = Qcow2(disk)
|
||||||
|
yield from qcow2.rebase(qemu_img_path, disk_image)
|
||||||
|
except (Qcow2Error, OSError) as e:
|
||||||
|
raise QemuError("Could not use qcow2 disk image {} for {} {}".format(disk_image, disk_name, e))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
disk = disk_image
|
disk = disk_image
|
||||||
options.extend(["-drive", 'file={},if={},index={},media=disk'.format(disk, interface, disk_index)])
|
options.extend(["-drive", 'file={},if={},index={},media=disk'.format(disk, interface, disk_index)])
|
||||||
|
@ -20,7 +20,7 @@ import pytest
|
|||||||
import shutil
|
import shutil
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from gns3server.modules.qemu.qcow2 import Qcow2,Qcow2Error
|
from gns3server.modules.qemu.qcow2 import Qcow2, Qcow2Error
|
||||||
|
|
||||||
|
|
||||||
def qemu_img():
|
def qemu_img():
|
||||||
@ -65,4 +65,3 @@ def test_rebase(tmpdir, loop):
|
|||||||
assert qcow2.backing_file == "empty8G.qcow2"
|
assert qcow2.backing_file == "empty8G.qcow2"
|
||||||
loop.run_until_complete(asyncio.async(qcow2.rebase(qemu_img(), str(tmpdir / "empty16G.qcow2"))))
|
loop.run_until_complete(asyncio.async(qcow2.rebase(qemu_img(), str(tmpdir / "empty16G.qcow2"))))
|
||||||
assert qcow2.backing_file == str(tmpdir / "empty16G.qcow2")
|
assert qcow2.backing_file == str(tmpdir / "empty16G.qcow2")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user