diff --git a/vmm/src/api/mod.rs b/vmm/src/api/mod.rs index 23514c609..f3a8019c4 100644 --- a/vmm/src/api/mod.rs +++ b/vmm/src/api/mod.rs @@ -116,6 +116,7 @@ pub struct VmmPingResponse { #[derive(Clone, Deserialize, Serialize)] pub struct VmResizeData { pub desired_vcpus: Option, + pub desired_ram: Option, } pub enum ApiResponsePayload { diff --git a/vmm/src/api/openapi/cloud-hypervisor.yaml b/vmm/src/api/openapi/cloud-hypervisor.yaml index a4366cb79..f88416dcc 100644 --- a/vmm/src/api/openapi/cloud-hypervisor.yaml +++ b/vmm/src/api/openapi/cloud-hypervisor.yaml @@ -432,3 +432,5 @@ components: desired_vcpus: minimum: 1 type: integer + desired_ram: + type: integer diff --git a/vmm/src/lib.rs b/vmm/src/lib.rs index 008f8b9bb..0416ac127 100644 --- a/vmm/src/lib.rs +++ b/vmm/src/lib.rs @@ -330,9 +330,13 @@ impl Vmm { self.vm_delete() } - fn vm_resize(&mut self, desired_vcpus: Option) -> result::Result<(), VmError> { + fn vm_resize( + &mut self, + desired_vcpus: Option, + desired_ram: Option, + ) -> result::Result<(), VmError> { if let Some(ref mut vm) = self.vm { - vm.resize(desired_vcpus) + vm.resize(desired_vcpus, desired_ram) } else { Err(VmError::VmNotRunning) } @@ -485,7 +489,10 @@ impl Vmm { } ApiRequest::VmResize(resize_data, sender) => { let response = self - .vm_resize(resize_data.desired_vcpus) + .vm_resize( + resize_data.desired_vcpus, + resize_data.desired_ram, + ) .map_err(ApiError::VmResize) .map(|_| ApiResponsePayload::Empty); sender.send(response).map_err(Error::ApiResponseSend)?; diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index 1a933f8e4..06a72bd9c 100755 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -482,7 +482,7 @@ impl Vm { Ok(()) } - pub fn resize(&mut self, desired_vcpus: Option) -> Result<()> { + pub fn resize(&mut self, desired_vcpus: Option, desired_memory: Option) -> Result<()> { if let Some(desired_vcpus) = desired_vcpus { self.cpu_manager .lock() @@ -495,6 +495,9 @@ impl Vm { self.config.lock().unwrap().cpus.boot_vcpus = desired_vcpus; } + if let Some(desired_memory) = desired_memory { + self.config.lock().unwrap().memory.size = desired_memory; + } Ok(()) }