| 2146 | } |
| 2147 | |
| 2148 | fn vm_resize( |
| 2149 | &mut self, |
| 2150 | desired_vcpus: Option<u32>, |
| 2151 | desired_ram: Option<u64>, |
| 2152 | desired_balloon: Option<u64>, |
| 2153 | ) -> result::Result<(), VmError> { |
| 2154 | self.vm_config.as_ref().ok_or(VmError::VmNotCreated)?; |
| 2155 | |
| 2156 | if let Some(ref mut vm) = self.vm { |
| 2157 | vm.resize(desired_vcpus, desired_ram, desired_balloon) |
| 2158 | .inspect_err(|e| error!("Error when resizing VM: {e:?}"))?; |
| 2159 | Ok(()) |
| 2160 | } else { |
| 2161 | let mut config = self.vm_config.as_ref().unwrap().lock().unwrap(); |
| 2162 | if let Some(desired_vcpus) = desired_vcpus { |
| 2163 | config.cpus.boot_vcpus = desired_vcpus; |
| 2164 | } |
| 2165 | if let Some(desired_ram) = desired_ram { |
| 2166 | config.memory.size = desired_ram; |
| 2167 | } |
| 2168 | if let Some(desired_balloon) = desired_balloon |
| 2169 | && let Some(balloon_config) = &mut config.balloon |
| 2170 | { |
| 2171 | balloon_config.size = desired_balloon; |
| 2172 | } |
| 2173 | Ok(()) |
| 2174 | } |
| 2175 | } |
| 2176 | |
| 2177 | fn vm_resize_disk(&mut self, id: String, desired_size: u64) -> result::Result<(), VmError> { |
| 2178 | self.vm_config.as_ref().ok_or(VmError::VmNotCreated)?; |