@@ -311,6 +311,10 @@ impl Configurator {
311311 for resource in resources {
312312 progress. set_resource ( & resource. name , & resource. resource_type ) ;
313313 progress. write_activity ( format ! ( "Get '{}'" , resource. name) . as_str ( ) ) ;
314+ if self . skip_resource ( & resource) ? {
315+ progress. write_increment ( 1 ) ;
316+ continue ;
317+ }
314318 let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
315319 return Err ( DscError :: ResourceNotFound ( resource. resource_type ) ) ;
316320 } ;
@@ -387,6 +391,10 @@ impl Configurator {
387391 for resource in resources {
388392 progress. set_resource ( & resource. name , & resource. resource_type ) ;
389393 progress. write_activity ( format ! ( "Set '{}'" , resource. name) . as_str ( ) ) ;
394+ if self . skip_resource ( & resource) ? {
395+ progress. write_increment ( 1 ) ;
396+ continue ;
397+ }
390398 let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
391399 return Err ( DscError :: ResourceNotFound ( resource. resource_type ) ) ;
392400 } ;
@@ -535,6 +543,10 @@ impl Configurator {
535543 for resource in resources {
536544 progress. set_resource ( & resource. name , & resource. resource_type ) ;
537545 progress. write_activity ( format ! ( "Test '{}'" , resource. name) . as_str ( ) ) ;
546+ if self . skip_resource ( & resource) ? {
547+ progress. write_increment ( 1 ) ;
548+ continue ;
549+ }
538550 let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
539551 return Err ( DscError :: ResourceNotFound ( resource. resource_type ) ) ;
540552 } ;
@@ -608,6 +620,10 @@ impl Configurator {
608620 for resource in & resources {
609621 progress. set_resource ( & resource. name , & resource. resource_type ) ;
610622 progress. write_activity ( format ! ( "Export '{}'" , resource. name) . as_str ( ) ) ;
623+ if self . skip_resource ( resource) ? {
624+ progress. write_increment ( 1 ) ;
625+ continue ;
626+ }
611627 let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
612628 return Err ( DscError :: ResourceNotFound ( resource. resource_type . clone ( ) ) ) ;
613629 } ;
@@ -642,6 +658,17 @@ impl Configurator {
642658 Ok ( result)
643659 }
644660
661+ fn skip_resource ( & mut self , resource : & Resource ) -> Result < bool , DscError > {
662+ if let Some ( condition) = & resource. condition {
663+ let condition_result = self . statement_parser . parse_and_execute ( condition, & self . context ) ?;
664+ if condition_result != Value :: Bool ( true ) {
665+ info ! ( "{}" , t!( "configure.config_doc.skippingResource" , name = resource. name, condition = condition, result = condition_result) ) ;
666+ return Ok ( true ) ;
667+ }
668+ }
669+ Ok ( false )
670+ }
671+
645672 /// Set the mounted path for the configuration.
646673 ///
647674 /// # Arguments
0 commit comments