Skip to content

Commit 6e86a93

Browse files
committed
vmm: Deprecate cpu_template in /machine-config API
Signed-off-by: Takahiro Itazuri <itazur@amazon.com>
1 parent 0c3c9fc commit 6e86a93

File tree

2 files changed

+37
-10
lines changed

2 files changed

+37
-10
lines changed

src/api_server/src/request/machine_configuration.rs

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,25 @@ pub(crate) fn parse_put_machine_config(body: &Body) -> Result<ParsedRequest, Err
2020
err
2121
})?;
2222

23+
// Check for the presence of deprecated `cpu_template` field.
24+
let mut deprecation_message = None;
25+
if config.cpu_template.is_some() {
26+
// `cpu_template` field in request is deprecated.
27+
METRICS.deprecated_api.deprecated_http_api_calls.inc();
28+
deprecation_message = Some("PUT /machine-config: cpu_template field is deprecated.");
29+
}
30+
31+
// Convert `MachineConfig` to `MachineConfigUpdate`.
2332
let config_update = MachineConfigUpdate::from(config);
2433

25-
Ok(ParsedRequest::new_sync(VmmAction::UpdateVmConfiguration(
26-
config_update,
27-
)))
34+
// Construct the `ParsedRequest` object.
35+
let mut parsed_req = ParsedRequest::new_sync(VmmAction::UpdateVmConfiguration(config_update));
36+
// If `cpu_template` was present, set the deprecation message in `parsing_info`.
37+
if let Some(msg) = deprecation_message {
38+
parsed_req.parsing_info().append_deprecation_message(msg);
39+
}
40+
41+
Ok(parsed_req)
2842
}
2943

3044
pub(crate) fn parse_patch_machine_config(body: &Body) -> Result<ParsedRequest, Error> {
@@ -39,9 +53,22 @@ pub(crate) fn parse_patch_machine_config(body: &Body) -> Result<ParsedRequest, E
3953
return method_to_error(Method::Patch);
4054
}
4155

42-
Ok(ParsedRequest::new_sync(VmmAction::UpdateVmConfiguration(
43-
config_update,
44-
)))
56+
// Check for the presence of deprecated `cpu_template` field.
57+
let mut deprecation_message = None;
58+
if config_update.cpu_template.is_some() {
59+
// `cpu_template` field in request is deprecated.
60+
METRICS.deprecated_api.deprecated_http_api_calls.inc();
61+
deprecation_message = Some("PATCH /machine-config: cpu_template is deprecated.");
62+
}
63+
64+
// Construct the `ParsedRequest` object.
65+
let mut parsed_req = ParsedRequest::new_sync(VmmAction::UpdateVmConfiguration(config_update));
66+
// If `cpu_template` was present, set the deprecation message in `parsing_info`.
67+
if let Some(msg) = deprecation_message {
68+
parsed_req.parsing_info().append_deprecation_message(msg);
69+
}
70+
71+
Ok(parsed_req)
4572
}
4673

4774
#[cfg(test)]

src/vmm/src/vmm_config/machine_config.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ pub struct MachineConfig {
4040
#[serde(default, deserialize_with = "deserialize_smt")]
4141
pub smt: bool,
4242
/// A CPU template that it is used to filter the CPU features exposed to the guest.
43-
#[serde(default, skip_serializing_if = "StaticCpuTemplate::is_none")]
44-
pub cpu_template: StaticCpuTemplate,
43+
#[serde(default, skip_serializing_if = "Option::is_none")]
44+
pub cpu_template: Option<StaticCpuTemplate>,
4545
/// Enables or disables dirty page tracking. Enabling allows incremental snapshots.
4646
#[serde(default)]
4747
pub track_dirty_pages: bool,
@@ -122,7 +122,7 @@ impl From<MachineConfig> for MachineConfigUpdate {
122122
vcpu_count: Some(cfg.vcpu_count),
123123
mem_size_mib: Some(cfg.mem_size_mib),
124124
smt: Some(cfg.smt),
125-
cpu_template: Some(cfg.cpu_template),
125+
cpu_template: cfg.cpu_template,
126126
track_dirty_pages: Some(cfg.track_dirty_pages),
127127
}
128128
}
@@ -212,7 +212,7 @@ impl From<&VmConfig> for MachineConfig {
212212
vcpu_count: value.vcpu_count,
213213
mem_size_mib: value.mem_size_mib,
214214
smt: value.smt,
215-
cpu_template: (&value.cpu_template).into(),
215+
cpu_template: Some((&value.cpu_template).into()),
216216
track_dirty_pages: value.track_dirty_pages,
217217
}
218218
}

0 commit comments

Comments
 (0)