@@ -232,6 +232,18 @@ impl Configurator {
232232 & self . config
233233 }
234234
235+ fn get_properties ( & mut self , resource : & Resource , resource_kind : & Kind ) -> Result < Option < Map < String , Value > > , DscError > {
236+ match resource_kind {
237+ Kind :: Group => {
238+ // if Group resource, we leave it to the resource to handle expressions
239+ Ok ( resource. properties . clone ( ) )
240+ } ,
241+ _ => {
242+ Ok ( self . invoke_property_expressions ( resource. properties . as_ref ( ) ) ?)
243+ } ,
244+ }
245+ }
246+
235247 /// Invoke the get operation on a resource.
236248 ///
237249 /// # Returns
@@ -245,13 +257,14 @@ impl Configurator {
245257 let mut result = ConfigurationGetResult :: new ( ) ;
246258 let resources = get_resource_invocation_order ( & self . config , & mut self . statement_parser , & self . context ) ?;
247259 let mut progress = ProgressBar :: new ( resources. len ( ) as u64 , self . progress_format ) ?;
260+ let discovery = & self . discovery . clone ( ) ;
248261 for resource in resources {
249262 progress. set_resource ( & resource. name , & resource. resource_type ) ;
250263 progress. write_activity ( format ! ( "Get '{}'" , resource. name) . as_str ( ) ) ;
251- let properties = self . invoke_property_expressions ( resource. properties . as_ref ( ) ) ?;
252- let Some ( dsc_resource) = self . discovery . find_resource ( & resource. resource_type ) else {
264+ let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
253265 return Err ( DscError :: ResourceNotFound ( resource. resource_type ) ) ;
254266 } ;
267+ let properties = self . get_properties ( & resource, & dsc_resource. kind ) ?;
255268 debug ! ( "resource_type {}" , & resource. resource_type) ;
256269 let filter = add_metadata ( & dsc_resource. kind , properties) ?;
257270 trace ! ( "filter: {filter}" ) ;
@@ -322,13 +335,14 @@ impl Configurator {
322335 let mut result = ConfigurationSetResult :: new ( ) ;
323336 let resources = get_resource_invocation_order ( & self . config , & mut self . statement_parser , & self . context ) ?;
324337 let mut progress = ProgressBar :: new ( resources. len ( ) as u64 , self . progress_format ) ?;
338+ let discovery = & self . discovery . clone ( ) ;
325339 for resource in resources {
326340 progress. set_resource ( & resource. name , & resource. resource_type ) ;
327341 progress. write_activity ( format ! ( "Set '{}'" , resource. name) . as_str ( ) ) ;
328- let properties = self . invoke_property_expressions ( resource. properties . as_ref ( ) ) ?;
329- let Some ( dsc_resource) = self . discovery . find_resource ( & resource. resource_type ) else {
342+ let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
330343 return Err ( DscError :: ResourceNotFound ( resource. resource_type ) ) ;
331344 } ;
345+ let properties = self . get_properties ( & resource, & dsc_resource. kind ) ?;
332346 debug ! ( "resource_type {}" , & resource. resource_type) ;
333347
334348 // see if the properties contains `_exist` and is false
@@ -466,13 +480,14 @@ impl Configurator {
466480 let mut result = ConfigurationTestResult :: new ( ) ;
467481 let resources = get_resource_invocation_order ( & self . config , & mut self . statement_parser , & self . context ) ?;
468482 let mut progress = ProgressBar :: new ( resources. len ( ) as u64 , self . progress_format ) ?;
483+ let discovery = & self . discovery . clone ( ) ;
469484 for resource in resources {
470485 progress. set_resource ( & resource. name , & resource. resource_type ) ;
471486 progress. write_activity ( format ! ( "Test '{}'" , resource. name) . as_str ( ) ) ;
472- let properties = self . invoke_property_expressions ( resource. properties . as_ref ( ) ) ?;
473- let Some ( dsc_resource) = self . discovery . find_resource ( & resource. resource_type ) else {
487+ let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
474488 return Err ( DscError :: ResourceNotFound ( resource. resource_type ) ) ;
475489 } ;
490+ let properties = self . get_properties ( & resource, & dsc_resource. kind ) ?;
476491 debug ! ( "resource_type {}" , & resource. resource_type) ;
477492 let expected = add_metadata ( & dsc_resource. kind , properties) ?;
478493 trace ! ( "{}" , t!( "configure.mod.expectedState" , state = expected) ) ;
@@ -541,13 +556,14 @@ impl Configurator {
541556
542557 let mut progress = ProgressBar :: new ( self . config . resources . len ( ) as u64 , self . progress_format ) ?;
543558 let resources = self . config . resources . clone ( ) ;
559+ let discovery = & self . discovery . clone ( ) ;
544560 for resource in & resources {
545561 progress. set_resource ( & resource. name , & resource. resource_type ) ;
546562 progress. write_activity ( format ! ( "Export '{}'" , resource. name) . as_str ( ) ) ;
547- let properties = self . invoke_property_expressions ( resource. properties . as_ref ( ) ) ?;
548- let Some ( dsc_resource) = self . discovery . find_resource ( & resource. resource_type ) else {
563+ let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
549564 return Err ( DscError :: ResourceNotFound ( resource. resource_type . clone ( ) ) ) ;
550565 } ;
566+ let properties = self . get_properties ( resource, & dsc_resource. kind ) ?;
551567 let input = add_metadata ( & dsc_resource. kind , properties) ?;
552568 trace ! ( "{}" , t!( "configure.mod.exportInput" , input = input) ) ;
553569 let export_result = match add_resource_export_results_to_configuration ( dsc_resource, Some ( dsc_resource) , & mut conf, input. as_str ( ) ) {
0 commit comments