@@ -170,10 +170,15 @@ fn escape_property_values(properties: &Map<String, Value>) -> Result<Option<Map<
170
170
Ok ( Some ( result) )
171
171
}
172
172
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 > {
174
174
if * kind == Kind :: Adapter {
175
175
// 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
+ }
177
182
let mut dsc_value = Map :: new ( ) ;
178
183
dsc_value. insert ( "context" . to_string ( ) , Value :: String ( "configuration" . to_string ( ) ) ) ;
179
184
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
185
190
return Ok ( serde_json:: to_string ( & properties) ?) ;
186
191
}
187
192
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
+
188
205
match properties {
189
206
Some ( properties) => {
190
207
Ok ( serde_json:: to_string ( & properties) ?)
@@ -330,7 +347,7 @@ impl Configurator {
330
347
} ;
331
348
let properties = self . get_properties ( & resource, & dsc_resource. kind ) ?;
332
349
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 ( ) ) ?;
334
351
trace ! ( "filter: {filter}" ) ;
335
352
let start_datetime = chrono:: Local :: now ( ) ;
336
353
let mut get_result = match dsc_resource. get ( & filter) {
@@ -425,7 +442,7 @@ impl Configurator {
425
442
}
426
443
} ;
427
444
428
- let desired = add_metadata ( & dsc_resource. kind , properties) ?;
445
+ let desired = add_metadata ( & dsc_resource. kind , properties, resource . metadata . clone ( ) ) ?;
429
446
trace ! ( "{}" , t!( "configure.mod.desired" , state = desired) ) ;
430
447
431
448
let start_datetime;
@@ -562,7 +579,7 @@ impl Configurator {
562
579
} ;
563
580
let properties = self . get_properties ( & resource, & dsc_resource. kind ) ?;
564
581
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 ( ) ) ?;
566
583
trace ! ( "{}" , t!( "configure.mod.expectedState" , state = expected) ) ;
567
584
let start_datetime = chrono:: Local :: now ( ) ;
568
585
let mut test_result = match dsc_resource. test ( & expected) {
@@ -638,7 +655,7 @@ impl Configurator {
638
655
return Err ( DscError :: ResourceNotFound ( resource. resource_type . clone ( ) ) ) ;
639
656
} ;
640
657
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 ( ) ) ?;
642
659
trace ! ( "{}" , t!( "configure.mod.exportInput" , input = input) ) ;
643
660
let export_result = match add_resource_export_results_to_configuration ( dsc_resource, & mut conf, input. as_str ( ) ) {
644
661
Ok ( result) => result,
0 commit comments