vmm: Add a 'resize-zone' action to the API actions

Implement a new VM action called 'resize-zone' allowing the user to
resize one specific memory zone at a time. This relies on all the
preliminary work from the previous commits to resize each virtio-mem
device independently from each others.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
Sebastien Boeuf
2020-09-10 17:34:15 +02:00
parent 141df701dd
commit 015c78411e
9 changed files with 194 additions and 5 deletions

View File

@@ -251,6 +251,23 @@ fn resize_api_command(
)
}
fn resize_zone_api_command(socket: &mut UnixStream, id: &str, size: &str) -> Result<(), Error> {
let resize_zone = vmm::api::VmResizeZoneData {
id: id.to_owned(),
desired_ram: size
.parse::<ByteSized>()
.map_err(Error::InvalidMemorySize)?
.0,
};
simple_api_command(
socket,
"PUT",
"resize-zone",
Some(&serde_json::to_string(&resize_zone).unwrap()),
)
}
fn add_device_api_command(socket: &mut UnixStream, config: &str) -> Result<(), Error> {
let device_config = vmm::config::DeviceConfig::parse(config).map_err(Error::AddDeviceConfig)?;
@@ -374,6 +391,19 @@ fn do_command(matches: &ArgMatches) -> Result<(), Error> {
.unwrap()
.value_of("balloon"),
),
Some("resize-zone") => resize_zone_api_command(
&mut socket,
matches
.subcommand_matches("resize-zone")
.unwrap()
.value_of("id")
.unwrap(),
matches
.subcommand_matches("resize-zone")
.unwrap()
.value_of("size")
.unwrap(),
),
Some("add-device") => add_device_api_command(
&mut socket,
matches
@@ -552,6 +582,24 @@ fn main() {
.number_of_values(1),
),
)
.subcommand(
SubCommand::with_name("resize-zone")
.about("Resize a memory zone")
.arg(
Arg::with_name("id")
.long("id")
.help("Memory zone identifier")
.takes_value(true)
.number_of_values(1),
)
.arg(
Arg::with_name("size")
.long("size")
.help("New memory zone size in bytes (supports K/M/G suffix)")
.takes_value(true)
.number_of_values(1),
),
)
.subcommand(SubCommand::with_name("resume").about("Resume the VM"))
.subcommand(SubCommand::with_name("shutdown").about("Shutdown the VM"))
.subcommand(