Skip to content
This repository was archived by the owner on Jan 23, 2026. It is now read-only.

Commit 157604c

Browse files
committed
implement qemu resize command
1 parent 0d61b70 commit 157604c

2 files changed

Lines changed: 52 additions & 0 deletions

File tree

packages/jumpstarter-driver-qemu/jumpstarter_driver_qemu/client.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
from contextlib import contextmanager
22

3+
import click
34
from jumpstarter_driver_composite.client import CompositeClient
45
from jumpstarter_driver_network.adapters import FabricAdapter, NovncAdapter
56

7+
from jumpstarter.client.decorators import driver_click_group
8+
69

710
class QemuClient(CompositeClient):
811
@property
@@ -17,6 +20,14 @@ def username(self) -> str:
1720
def password(self) -> str:
1821
return self.call("get_password")
1922

23+
def set_disk_size(self, size: str) -> None:
24+
"""Set the disk size for resizing before boot."""
25+
self.call("set_disk_size", size)
26+
27+
def set_memory_size(self, size: str) -> None:
28+
"""Set the memory size for next boot."""
29+
self.call("set_memory_size", size)
30+
2031
@contextmanager
2132
def novnc(self):
2233
with NovncAdapter(client=self.vnc) as url:
@@ -30,3 +41,30 @@ def shell(self):
3041
connect_kwargs={"password": self.password},
3142
) as conn:
3243
yield conn
44+
45+
def cli(self):
46+
@driver_click_group(self)
47+
def base():
48+
"""QEMU virtual machine operations"""
49+
pass
50+
51+
@base.group()
52+
def resize():
53+
"""Resize QEMU resources"""
54+
pass
55+
56+
@resize.command(name="disk")
57+
@click.argument("size")
58+
def resize_disk(size):
59+
"""Resize the root disk (e.g., 20G). Run before power on."""
60+
self.set_disk_size(size)
61+
click.echo(f"Disk will be resized to {size} on next power on")
62+
63+
@resize.command(name="memory")
64+
@click.argument("size")
65+
def resize_memory(size):
66+
"""Set memory size (e.g., 2G, 4G). Takes effect on next boot."""
67+
self.set_memory_size(size)
68+
click.echo(f"Memory will be set to {size} on next power on")
69+
70+
return base

packages/jumpstarter-driver-qemu/jumpstarter_driver_qemu/driver.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,3 +410,17 @@ def _parse_size(self, size: str) -> int:
410410
return int(TypeAdapter(ByteSize).validate_python(size + "iB" if size[-1] in "kmgtKMGT" else size))
411411
except (ValidationError, IndexError):
412412
raise ValueError(f"Invalid size: '{size}'. Use e.g. '20G', '512M', '2T'") from None
413+
414+
@export
415+
@validate_call(validate_return=True)
416+
def set_disk_size(self, size: str) -> None:
417+
"""Set the disk size for resizing before boot."""
418+
self._parse_size(size) # Validate
419+
self.disk_size = size
420+
421+
@export
422+
@validate_call(validate_return=True)
423+
def set_memory_size(self, size: str) -> None:
424+
"""Set the memory size for next boot."""
425+
self._parse_size(size) # Validate
426+
self.mem = size

0 commit comments

Comments
 (0)