@@ -311,6 +311,10 @@ impl Configurator {
311
311
for resource in resources {
312
312
progress. set_resource ( & resource. name , & resource. resource_type ) ;
313
313
progress. write_activity ( format ! ( "Get '{}'" , resource. name) . as_str ( ) ) ;
314
+ if self . skip_resource ( & resource) ? {
315
+ progress. write_increment ( 1 ) ;
316
+ continue ;
317
+ }
314
318
let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
315
319
return Err ( DscError :: ResourceNotFound ( resource. resource_type ) ) ;
316
320
} ;
@@ -387,6 +391,10 @@ impl Configurator {
387
391
for resource in resources {
388
392
progress. set_resource ( & resource. name , & resource. resource_type ) ;
389
393
progress. write_activity ( format ! ( "Set '{}'" , resource. name) . as_str ( ) ) ;
394
+ if self . skip_resource ( & resource) ? {
395
+ progress. write_increment ( 1 ) ;
396
+ continue ;
397
+ }
390
398
let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
391
399
return Err ( DscError :: ResourceNotFound ( resource. resource_type ) ) ;
392
400
} ;
@@ -535,6 +543,10 @@ impl Configurator {
535
543
for resource in resources {
536
544
progress. set_resource ( & resource. name , & resource. resource_type ) ;
537
545
progress. write_activity ( format ! ( "Test '{}'" , resource. name) . as_str ( ) ) ;
546
+ if self . skip_resource ( & resource) ? {
547
+ progress. write_increment ( 1 ) ;
548
+ continue ;
549
+ }
538
550
let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
539
551
return Err ( DscError :: ResourceNotFound ( resource. resource_type ) ) ;
540
552
} ;
@@ -608,6 +620,10 @@ impl Configurator {
608
620
for resource in & resources {
609
621
progress. set_resource ( & resource. name , & resource. resource_type ) ;
610
622
progress. write_activity ( format ! ( "Export '{}'" , resource. name) . as_str ( ) ) ;
623
+ if self . skip_resource ( resource) ? {
624
+ progress. write_increment ( 1 ) ;
625
+ continue ;
626
+ }
611
627
let Some ( dsc_resource) = discovery. find_resource ( & resource. resource_type ) else {
612
628
return Err ( DscError :: ResourceNotFound ( resource. resource_type . clone ( ) ) ) ;
613
629
} ;
@@ -642,6 +658,17 @@ impl Configurator {
642
658
Ok ( result)
643
659
}
644
660
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
+
645
672
/// Set the mounted path for the configuration.
646
673
///
647
674
/// # Arguments
0 commit comments