@@ -170,10 +170,15 @@ fn escape_property_values(properties: &Map<String, Value>) -> Result<Option<Map<
170170 Ok ( Some ( result) )
171171}
172172
173- fn add_metadata ( kind : & Kind , mut properties : Option < Map < String , Value > > ) -> Result < String , DscError > {
173+ fn add_metadata ( kind : & Kind , mut properties : Option < Map < String , Value > > , resource_metadata : Option < Metadata > ) -> Result < String , DscError > {
174174 if * kind == Kind :: Adapter {
175175 // add metadata to the properties so the adapter knows this is a config
176- let mut metadata = Map :: new ( ) ;
176+ let mut metadata: Map < String , Value > = Map :: new ( ) ;
177+ if let Some ( resource_metadata) = resource_metadata {
178+ if !resource_metadata. other . is_empty ( ) {
179+ metadata. extend ( resource_metadata. other ) ;
180+ }
181+ }
177182 let mut dsc_value = Map :: new ( ) ;
178183 dsc_value. insert ( "context" . to_string ( ) , Value :: String ( "configuration" . to_string ( ) ) ) ;
179184 metadata. insert ( "Microsoft.DSC" . to_string ( ) , Value :: Object ( dsc_value) ) ;
@@ -185,6 +190,18 @@ fn add_metadata(kind: &Kind, mut properties: Option<Map<String, Value>> ) -> Res
185190 return Ok ( serde_json:: to_string ( & properties) ?) ;
186191 }
187192
193+ if let Some ( resource_metadata) = resource_metadata {
194+ let other_metadata = resource_metadata. other . clone ( ) ;
195+ if let Some ( mut properties) = properties {
196+ properties. insert ( "_metadata" . to_string ( ) , Value :: Object ( other_metadata) ) ;
197+ return Ok ( serde_json:: to_string ( & properties) ?) ;
198+ }
199+ let mut props = Map :: new ( ) ;
200+ props. insert ( "_metadata" . to_string ( ) , Value :: Object ( other_metadata) ) ;
201+ properties = Some ( props) ;
202+ return Ok ( serde_json:: to_string ( & properties) ?) ;
203+ }
204+
188205 match properties {
189206 Some ( properties) => {
190207 Ok ( serde_json:: to_string ( & properties) ?)
@@ -330,7 +347,7 @@ impl Configurator {
330347 } ;
331348 let properties = self . get_properties ( & resource, & dsc_resource. kind ) ?;
332349 debug ! ( "resource_type {}" , & resource. resource_type) ;
333- let filter = add_metadata ( & dsc_resource. kind , properties) ?;
350+ let filter = add_metadata ( & dsc_resource. kind , properties, resource . metadata . clone ( ) ) ?;
334351 trace ! ( "filter: {filter}" ) ;
335352 let start_datetime = chrono:: Local :: now ( ) ;
336353 let mut get_result = match dsc_resource. get ( & filter) {
@@ -425,7 +442,7 @@ impl Configurator {
425442 }
426443 } ;
427444
428- let desired = add_metadata ( & dsc_resource. kind , properties) ?;
445+ let desired = add_metadata ( & dsc_resource. kind , properties, resource . metadata . clone ( ) ) ?;
429446 trace ! ( "{}" , t!( "configure.mod.desired" , state = desired) ) ;
430447
431448 let start_datetime;
@@ -562,7 +579,7 @@ impl Configurator {
562579 } ;
563580 let properties = self . get_properties ( & resource, & dsc_resource. kind ) ?;
564581 debug ! ( "resource_type {}" , & resource. resource_type) ;
565- let expected = add_metadata ( & dsc_resource. kind , properties) ?;
582+ let expected = add_metadata ( & dsc_resource. kind , properties, resource . metadata . clone ( ) ) ?;
566583 trace ! ( "{}" , t!( "configure.mod.expectedState" , state = expected) ) ;
567584 let start_datetime = chrono:: Local :: now ( ) ;
568585 let mut test_result = match dsc_resource. test ( & expected) {
@@ -638,7 +655,7 @@ impl Configurator {
638655 return Err ( DscError :: ResourceNotFound ( resource. resource_type . clone ( ) ) ) ;
639656 } ;
640657 let properties = self . get_properties ( resource, & dsc_resource. kind ) ?;
641- let input = add_metadata ( & dsc_resource. kind , properties) ?;
658+ let input = add_metadata ( & dsc_resource. kind , properties, resource . metadata . clone ( ) ) ?;
642659 trace ! ( "{}" , t!( "configure.mod.exportInput" , input = input) ) ;
643660 let export_result = match add_resource_export_results_to_configuration ( dsc_resource, & mut conf, input. as_str ( ) ) {
644661 Ok ( result) => result,
0 commit comments