4
4
use crate :: configure:: config_doc:: { ExecutionKind , Metadata } ;
5
5
use crate :: configure:: parameters:: Input ;
6
6
use crate :: dscerror:: DscError ;
7
+ use crate :: dscresources:: invoke_result:: ExportResult ;
7
8
use crate :: dscresources:: {
8
- { dscresource:: { Capability , Invoke , get_diff} , invoke_result :: { SetResult , ResourceSetResponse } } ,
9
- invoke_result:: GetResult ,
9
+ { dscresource:: { Capability , Invoke , get_diff} ,
10
+ invoke_result:: { GetResult , SetResult , TestResult , ResourceSetResponse } } ,
10
11
resource_manifest:: Kind ,
11
12
} ;
12
13
use crate :: DscResource ;
@@ -56,7 +57,7 @@ pub struct Configurator {
56
57
/// # Errors
57
58
///
58
59
/// This function will return an error if the underlying resource fails.
59
- pub fn add_resource_export_results_to_configuration ( resource : & DscResource , adapter_resource : Option < & DscResource > , conf : & mut Configuration , input : & str ) -> Result < ( ) , DscError > {
60
+ pub fn add_resource_export_results_to_configuration ( resource : & DscResource , adapter_resource : Option < & DscResource > , conf : & mut Configuration , input : & str ) -> Result < ExportResult , DscError > {
60
61
61
62
let export_result = match adapter_resource {
62
63
Some ( _) => adapter_resource. unwrap ( ) . export ( input) ?,
@@ -73,7 +74,7 @@ pub fn add_resource_export_results_to_configuration(resource: &DscResource, adap
73
74
conf. resources . push ( r) ;
74
75
}
75
76
76
- Ok ( ( ) )
77
+ Ok ( export_result )
77
78
}
78
79
79
80
// for values returned by resources, they may look like expressions, so we make sure to escape them in case
@@ -261,7 +262,18 @@ impl Configurator {
261
262
let start_datetime = chrono:: Local :: now ( ) ;
262
263
let get_result = dsc_resource. get ( & filter) ?;
263
264
let end_datetime = chrono:: Local :: now ( ) ;
264
- self . context . outputs . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , serde_json:: to_value ( & get_result) ?) ;
265
+ match & get_result {
266
+ GetResult :: Resource ( resource_result) => {
267
+ self . context . references . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , serde_json:: to_value ( & resource_result. actual_state ) ?) ;
268
+ } ,
269
+ GetResult :: Group ( group) => {
270
+ let mut results = Vec :: < Value > :: new ( ) ;
271
+ for result in group {
272
+ results. push ( serde_json:: to_value ( & result. result ) ?) ;
273
+ }
274
+ self . context . references . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , Value :: Array ( results) ) ;
275
+ } ,
276
+ }
265
277
let resource_result = config_result:: ResourceGetResult {
266
278
metadata : Some (
267
279
Metadata {
@@ -372,7 +384,19 @@ impl Configurator {
372
384
return Err ( DscError :: NotImplemented ( t ! ( "configure.mod.deleteNotSupported" , resource = resource. resource_type) . to_string ( ) ) ) ;
373
385
}
374
386
375
- self . context . outputs . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , serde_json:: to_value ( & set_result) ?) ;
387
+ match & set_result {
388
+ SetResult :: Resource ( resource_result) => {
389
+ self . context . references . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , serde_json:: to_value ( & resource_result. after_state ) ?) ;
390
+ } ,
391
+ SetResult :: Group ( group) => {
392
+ let mut results = Vec :: < Value > :: new ( ) ;
393
+ for result in group {
394
+ results. push ( serde_json:: to_value ( & result. result ) ?) ;
395
+ }
396
+ self . context . references . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , Value :: Array ( results) ) ;
397
+ } ,
398
+ }
399
+
376
400
let resource_result = config_result:: ResourceSetResult {
377
401
metadata : Some (
378
402
Metadata {
@@ -425,7 +449,18 @@ impl Configurator {
425
449
let start_datetime = chrono:: Local :: now ( ) ;
426
450
let test_result = dsc_resource. test ( & expected) ?;
427
451
let end_datetime = chrono:: Local :: now ( ) ;
428
- self . context . outputs . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , serde_json:: to_value ( & test_result) ?) ;
452
+ match & test_result {
453
+ TestResult :: Resource ( resource_test_result) => {
454
+ self . context . references . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , serde_json:: to_value ( & resource_test_result. actual_state ) ?) ;
455
+ } ,
456
+ TestResult :: Group ( group) => {
457
+ let mut results = Vec :: < Value > :: new ( ) ;
458
+ for result in group {
459
+ results. push ( serde_json:: to_value ( & result. result ) ?) ;
460
+ }
461
+ self . context . references . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , Value :: Array ( results) ) ;
462
+ } ,
463
+ }
429
464
let resource_result = config_result:: ResourceTestResult {
430
465
metadata : Some (
431
466
Metadata {
@@ -476,7 +511,8 @@ impl Configurator {
476
511
} ;
477
512
let input = add_metadata ( & dsc_resource. kind , properties) ?;
478
513
trace ! ( "{}" , t!( "configure.mod.exportInput" , input = input) ) ;
479
- add_resource_export_results_to_configuration ( dsc_resource, Some ( dsc_resource) , & mut conf, input. as_str ( ) ) ?;
514
+ let export_result = add_resource_export_results_to_configuration ( dsc_resource, Some ( dsc_resource) , & mut conf, input. as_str ( ) ) ?;
515
+ self . context . references . insert ( format ! ( "{}:{}" , resource. resource_type, resource. name) , serde_json:: to_value ( & export_result. actual_state ) ?) ;
480
516
}
481
517
482
518
conf. metadata = Some ( self . get_result_metadata ( Operation :: Export ) ) ;
0 commit comments