Skip to content

Commit 30b172b

Browse files
api_server: add get for machine-config
Signed-off-by: Andreea Florescu <[email protected]>
1 parent 6e7e9da commit 30b172b

File tree

5 files changed

+48
-7
lines changed

5 files changed

+48
-7
lines changed

api_server/src/http_service.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,13 @@ fn parse_request<'a>(
200200
_ => Err(Error::InvalidPathMethod(path, method)),
201201
},
202202
"machine-config" => match v[1..].len() {
203-
0 if is_get => Ok(ParsedRequest::Dummy),
203+
0 if is_get =>
204+
// Create an empty MachineConfiguration which is used for sending the body
205+
Ok(MachineConfiguration {
206+
vcpu_count: None,
207+
mem_size_mib: None,
208+
}.into_parsed_request(Method::Get)
209+
.map_err(|s| Error::Generic(StatusCode::BadRequest, s))?),
204210

205211
0 if is_put => Ok(serde_json::from_slice::<MachineConfiguration>(body)
206212
.map_err(Error::SerdeJson)?

api_server/src/request/sync/machine_configuration.rs

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,40 @@ impl GenerateResponse for PutMachineConfigurationOutcome {
4848
}
4949
}
5050

51+
impl GenerateResponse for MachineConfiguration {
52+
fn generate_response(&self) -> Response {
53+
let vcpu_count = match self.vcpu_count {
54+
Some(v) => v.to_string(),
55+
None => String::from("Uninitialized"),
56+
};
57+
let mem_size = match self.mem_size_mib {
58+
Some(v) => v.to_string(),
59+
None => String::from("Uninitialized"),
60+
};
61+
62+
json_response(
63+
StatusCode::Ok,
64+
format!(
65+
"{{ \"vcpu_count\": {:?}, \"mem_size_mib\": {:?} }}",
66+
vcpu_count, mem_size
67+
),
68+
)
69+
}
70+
}
71+
5172
impl IntoParsedRequest for MachineConfiguration {
52-
fn into_parsed_request(self, _method: Method) -> result::Result<ParsedRequest, String> {
73+
fn into_parsed_request(self, method: Method) -> result::Result<ParsedRequest, String> {
5374
let (sender, receiver) = oneshot::channel();
54-
Ok(ParsedRequest::Sync(
55-
SyncRequest::PutMachineConfiguration(self, sender),
56-
receiver,
57-
))
75+
match method {
76+
Method::Get => Ok(ParsedRequest::Sync(
77+
SyncRequest::GetMachineConfiguration(sender),
78+
receiver,
79+
)),
80+
Method::Put => Ok(ParsedRequest::Sync(
81+
SyncRequest::PutMachineConfiguration(self, sender),
82+
receiver,
83+
)),
84+
_ => Ok(ParsedRequest::Dummy),
85+
}
5886
}
5987
}

api_server/src/request/sync/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ pub enum DeviceState {
5353
// This enum contains messages for the VMM which represent sync requests. They each contain various
5454
// bits of information (ids, paths, etc.), together with an OutcomeSender, which is always present.
5555
pub enum SyncRequest {
56+
GetMachineConfiguration(SyncOutcomeSender),
5657
PutBootSource(BootSourceBody, SyncOutcomeSender),
5758
PutDrive(DriveDescription, SyncOutcomeSender),
5859
PutMachineConfiguration(MachineConfiguration, SyncOutcomeSender),

data_model/src/vm/machine_config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#[derive(Debug, Deserialize, Serialize)]
1+
#[derive(Clone, Debug, Deserialize, Serialize)]
22
pub struct MachineConfiguration {
33
#[serde(skip_serializing_if = "Option::is_none")]
44
pub vcpu_count: Option<u8>,

vmm/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -900,6 +900,12 @@ impl Vmm {
900900
}
901901
ApiRequest::Sync(req) => {
902902
match req {
903+
SyncRequest::GetMachineConfiguration(sender) => {
904+
sender
905+
.send(Box::new(self.vm_config.clone()))
906+
.map_err(|_| ())
907+
.expect("one-shot channel closed");
908+
}
903909
SyncRequest::PutDrive(drive_description, sender) => {
904910
match self.put_block_device(BlockDeviceConfig::from(drive_description)) {
905911
Ok(_) =>

0 commit comments

Comments
 (0)