@@ -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
3044pub ( crate ) fn parse_patch_machine_config ( body : & Body ) -> Result < ParsedRequest , Error > {
@@ -39,17 +53,30 @@ 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) ]
4875mod tests {
4976 use vmm:: cpu_config:: templates:: StaticCpuTemplate ;
5077
5178 use super :: * ;
52- use crate :: parsed_request:: tests:: vmm_action_from_request;
79+ use crate :: parsed_request:: tests:: { depr_action_from_req , vmm_action_from_request} ;
5380
5481 #[ test]
5582 fn test_parse_get_machine_config_request ( ) {
@@ -79,6 +106,24 @@ mod tests {
79106 "vcpu_count": 8,
80107 "mem_size_mib": 1024
81108 }"# ;
109+ let expected_config = MachineConfigUpdate {
110+ vcpu_count : Some ( 8 ) ,
111+ mem_size_mib : Some ( 1024 ) ,
112+ smt : Some ( false ) ,
113+ cpu_template : None ,
114+ track_dirty_pages : Some ( false ) ,
115+ } ;
116+
117+ match vmm_action_from_request ( parse_put_machine_config ( & Body :: new ( body) ) . unwrap ( ) ) {
118+ VmmAction :: UpdateVmConfiguration ( config) => assert_eq ! ( config, expected_config) ,
119+ _ => panic ! ( "Test failed." ) ,
120+ }
121+
122+ let body = r#"{
123+ "vcpu_count": 8,
124+ "mem_size_mib": 1024,
125+ "cpu_template": "None"
126+ }"# ;
82127 let expected_config = MachineConfigUpdate {
83128 vcpu_count : Some ( 8 ) ,
84129 mem_size_mib : Some ( 1024 ) ,
@@ -102,7 +147,7 @@ mod tests {
102147 vcpu_count : Some ( 8 ) ,
103148 mem_size_mib : Some ( 1024 ) ,
104149 smt : Some ( false ) ,
105- cpu_template : Some ( StaticCpuTemplate :: None ) ,
150+ cpu_template : None ,
106151 track_dirty_pages : Some ( true ) ,
107152 } ;
108153
@@ -155,7 +200,7 @@ mod tests {
155200 vcpu_count : Some ( 8 ) ,
156201 mem_size_mib : Some ( 1024 ) ,
157202 smt : Some ( true ) ,
158- cpu_template : Some ( StaticCpuTemplate :: None ) ,
203+ cpu_template : None ,
159204 track_dirty_pages : Some ( true ) ,
160205 } ;
161206
@@ -209,4 +254,40 @@ mod tests {
209254 let body = r#"{}"# ;
210255 assert ! ( parse_patch_machine_config( & Body :: new( body) ) . is_err( ) ) ;
211256 }
257+
258+ #[ test]
259+ fn test_depr_cpu_template_in_put_req ( ) {
260+ let body = r#"{
261+ "vcpu_count": 8,
262+ "mem_size_mib": 1024,
263+ "cpu_template": "None"
264+ }"# ;
265+ depr_action_from_req (
266+ parse_put_machine_config ( & Body :: new ( body) ) . unwrap ( ) ,
267+ Some ( "PUT /machine-config: cpu_template field is deprecated." . to_string ( ) ) ,
268+ ) ;
269+
270+ let body = r#"{
271+ "vcpu_count": 8,
272+ "mem_size_mib": 1024
273+ }"# ;
274+ depr_action_from_req ( parse_put_machine_config ( & Body :: new ( body) ) . unwrap ( ) , None ) ;
275+ }
276+
277+ #[ test]
278+ fn test_depr_cpu_template_in_patch_req ( ) {
279+ let body = r#"{
280+ "vcpu_count: 8,
281+ "cpu_template": "None"
282+ }"# ;
283+ depr_action_from_req (
284+ parse_patch_machine_config ( & Body :: new ( body) ) . unwrap ( ) ,
285+ Some ( "PATCH /machine-config: cpu_template is deprecated." . to_string ( ) ) ,
286+ ) ;
287+
288+ let body = r#"{
289+ "vcpu_count": 8
290+ }"# ;
291+ depr_action_from_req ( parse_patch_machine_config ( & Body :: new ( body) ) . unwrap ( ) , None ) ;
292+ }
212293}
0 commit comments