Skip to content

Commit 95a090f

Browse files
committed
Support storage driver defaults (file/lvm/lvmthin)
1 parent ca1c1a9 commit 95a090f

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

host-agent/api/handlers.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,33 @@ def _norm(value: Any, default: str = "") -> str:
682682
net = NetSpec(driver=net_driver, bridge=net_bridge, nics=nics, host_bridge=net_host_bridge, uplink=net_uplink)
683683
return Spec(vm=vm, host=host, vmext=vmext, storage=storage, net=net)
684684

685+
def _build_storage_spec(self, vm: "VMDetails", payload: Dict[str, Any]) -> "StorageSpec":
686+
storage_defaults = self.agent_defaults.get("storage", {}) if isinstance(self.agent_defaults, dict) else {}
687+
driver = (storage_defaults.get("driver") or "file").lower()
688+
volume_dir = storage_defaults.get("volume_dir", "/var/lib/firecracker/volumes")
689+
size = storage_defaults.get("size")
690+
691+
spec = StorageSpec(driver=driver, volume_file=str(Path(volume_dir) / f"{vm.name}.img"), size=size)
692+
693+
if driver == "lvm":
694+
vg = storage_defaults.get("volume_group") or storage_defaults.get("vg")
695+
if not vg:
696+
raise HTTPException(status_code=500, detail="storage.volume_group required for lvm")
697+
spec.vg = vg
698+
return spec
699+
700+
if driver == "lvmthin":
701+
vg = storage_defaults.get("volume_group") or storage_defaults.get("vg")
702+
pool = storage_defaults.get("thinpool")
703+
if not vg or not pool:
704+
raise HTTPException(status_code=500, detail="storage.volume_group and storage.thinpool required for lvmthin")
705+
spec.vg = vg
706+
spec.thinpool = pool
707+
return spec
708+
709+
spec.driver = "file"
710+
return spec
711+
685712
def _cfg_to_spec(self, cfg: Dict[str, Any], vm_name: str) -> Spec:
686713
"""Convert configuration to Spec object."""
687714
from models import HostDetails, NetSpec, NIC, StorageSpec, VMDetails, VMExt

host-agent/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ class StorageSpec:
6060

6161
driver: str
6262
volume_file: str
63+
vg: Optional[str] = None
64+
thinpool: Optional[str] = None
65+
size: Optional[int] = None
6366

6467

6568
@dataclasses.dataclass

0 commit comments

Comments
 (0)