Skip to content

Commit 8dc3dea

Browse files
data_model: added module for saving vmm state
This module should contain in the future all the structures that need to be shared between the API server and VMM. For now only contains the vm configuration. Signed-off-by: Andreea Florescu <fandree@amazon.com>
1 parent c9f61bf commit 8dc3dea

12 files changed

Lines changed: 58 additions & 44 deletions

File tree

api_server/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ tokio-core = "=0.1.12"
1313
tokio-uds = "=0.1.7"
1414
tokio-io = "=0.1.5"
1515

16+
data_model = { path = "../data_model" }
1617
fc_util = { path = "../fc_util" }
1718
net_util = { path = "../net_util" }
1819
sys_util = { path = "../sys_util" }

api_server/src/http_service.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use hyper::{self, Chunk, Headers, Method, StatusCode};
1212
use serde_json;
1313
use tokio_core::reactor::Handle;
1414

15+
use data_model::vm::MachineConfiguration;
1516
use request::{self, ApiRequest, AsyncOutcome, AsyncRequestBody, IntoParsedRequest, ParsedRequest};
1617
use request::instance_info::InstanceInfo;
1718
use super::{ActionMap, ActionMapValue};
@@ -184,9 +185,7 @@ fn parse_machine_config_req<'a>(
184185
match path_tokens[1..].len() {
185186
0 if method == Method::Get => Ok(ParsedRequest::Dummy),
186187

187-
0 if method == Method::Put => Ok(serde_json::from_slice::<
188-
request::MachineConfigurationBody,
189-
>(body)
188+
0 if method == Method::Put => Ok(serde_json::from_slice::<MachineConfiguration>(body)
190189
.map_err(Error::SerdeJson)?
191190
.into_parsed_request(method)
192191
.map_err(|s| Error::Generic(StatusCode::BadRequest, s))?),
@@ -500,8 +499,8 @@ mod tests {
500499
use net_util::MacAddr;
501500
use fc_util::LriHashMap;
502501
use request::async::AsyncRequest;
503-
use request::sync::{DeviceState, DriveDescription, DrivePermissions, MachineConfigurationBody,
504-
NetworkInterfaceBody, SyncRequest, VsockJsonBody};
502+
use request::sync::{DeviceState, DriveDescription, DrivePermissions, NetworkInterfaceBody,
503+
SyncRequest, VsockJsonBody};
505504

506505
fn body_to_string(body: hyper::Body) -> String {
507506
let ret = body.fold(Vec::new(), |mut acc, chunk| {
@@ -876,7 +875,7 @@ mod tests {
876875
);
877876

878877
// PUT
879-
let mcb = MachineConfigurationBody {
878+
let mcb = MachineConfiguration {
880879
vcpu_count: Some(42),
881880
mem_size_mib: Some(1025),
882881
};

api_server/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ extern crate serde_json;
77
extern crate tokio_core;
88
extern crate tokio_uds;
99

10+
extern crate data_model;
1011
extern crate fc_util;
1112
extern crate net_util;
1213
extern crate sys_util;

api_server/src/request/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ use std::result;
66
use hyper::Method;
77
pub use self::async::{AsyncOutcome, AsyncOutcomeReceiver, AsyncOutcomeSender, AsyncRequest,
88
AsyncRequestBody};
9-
pub use self::sync::{BootSourceBody, DriveDescription, MachineConfigurationBody,
10-
NetworkInterfaceBody, SyncOutcomeReceiver, SyncOutcomeSender, SyncRequest,
11-
VsockJsonBody};
9+
pub use self::sync::{BootSourceBody, DriveDescription, NetworkInterfaceBody, SyncOutcomeReceiver,
10+
SyncOutcomeSender, SyncRequest, VsockJsonBody};
1211

1312
pub mod instance_info;
1413

api_server/src/request/sync/machine_configuration.rs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,11 @@ use std::result;
33
use futures::sync::oneshot;
44
use hyper::{Method, Response, StatusCode};
55

6+
use data_model::vm::MachineConfiguration;
67
use http_service::{empty_response, json_fault_message, json_response};
78
use request::{IntoParsedRequest, ParsedRequest, SyncRequest};
89
use request::sync::GenerateResponse;
910

10-
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
11-
pub struct MachineConfigurationBody {
12-
#[serde(skip_serializing_if = "Option::is_none")]
13-
pub vcpu_count: Option<u8>,
14-
#[serde(skip_serializing_if = "Option::is_none")]
15-
pub mem_size_mib: Option<usize>,
16-
}
17-
1811
#[derive(Debug)]
1912
pub enum PutMachineConfigurationError {
2013
InvalidVcpuCount,
@@ -55,7 +48,7 @@ impl GenerateResponse for PutMachineConfigurationOutcome {
5548
}
5649
}
5750

58-
impl IntoParsedRequest for MachineConfigurationBody {
51+
impl IntoParsedRequest for MachineConfiguration {
5952
fn into_parsed_request(self, _method: Method) -> result::Result<ParsedRequest, String> {
6053
let (sender, receiver) = oneshot::channel();
6154
Ok(ParsedRequest::Sync(
@@ -109,7 +102,7 @@ mod tests {
109102

110103
#[test]
111104
fn test_into_parsed_request() {
112-
let body = MachineConfigurationBody {
105+
let body = MachineConfiguration {
113106
vcpu_count: Some(8),
114107
mem_size_mib: Some(1024),
115108
};

api_server/src/request/sync/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::result;
44
use futures::sync::oneshot;
55
use hyper::{self, StatusCode};
66

7+
use data_model::vm::MachineConfiguration;
78
use http_service::{empty_response, json_fault_message, json_response};
89
use net_util::TapError;
910

@@ -15,7 +16,6 @@ mod vsock;
1516

1617
pub use self::drive::{DriveDescription, DriveError, DrivePermissions, PutDriveOutcome};
1718
pub use self::boot_source::{BootSourceBody, BootSourceType, LocalImage};
18-
pub use self::machine_configuration::MachineConfigurationBody;
1919
pub use self::net::NetworkInterfaceBody;
2020
pub use self::vsock::VsockJsonBody;
2121

@@ -55,7 +55,7 @@ pub enum DeviceState {
5555
pub enum SyncRequest {
5656
PutBootSource(BootSourceBody, SyncOutcomeSender),
5757
PutDrive(DriveDescription, SyncOutcomeSender),
58-
PutMachineConfiguration(MachineConfigurationBody, SyncOutcomeSender),
58+
PutMachineConfiguration(MachineConfiguration, SyncOutcomeSender),
5959
PutNetworkInterface(NetworkInterfaceBody, SyncOutcomeSender),
6060
PutVsock(VsockJsonBody, SyncOutcomeSender),
6161
}

data_model/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "data_model"
3+
version = "0.1.0"
4+
authors = ["Amazon firecracker team <firecracker-devel@amazon.com>"]
5+
6+
[dependencies]
7+
serde = "=1.0.27"
8+
serde_derive = "=1.0.27"

data_model/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
extern crate serde;
2+
#[macro_use]
3+
extern crate serde_derive;
4+
5+
pub mod vm;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
2+
pub struct MachineConfiguration {
3+
#[serde(skip_serializing_if = "Option::is_none")]
4+
pub vcpu_count: Option<u8>,
5+
#[serde(skip_serializing_if = "Option::is_none")]
6+
pub mem_size_mib: Option<usize>,
7+
}
8+
9+
impl Default for MachineConfiguration {
10+
fn default() -> Self {
11+
MachineConfiguration {
12+
vcpu_count: Some(1),
13+
mem_size_mib: Some(128),
14+
}
15+
}
16+
}

data_model/src/vm/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
pub mod machine_config;
2+
3+
pub use vm::machine_config::MachineConfiguration;

0 commit comments

Comments
 (0)