@@ -12,22 +12,22 @@ use tracing::{error, warn, info, debug, trace};
12
12
pub const EXIT_PROCESS_TERMINATED : i32 = 0x102 ;
13
13
14
14
15
- pub fn log_resource_traces ( stderr : & str )
15
+ pub fn log_resource_traces ( process_name : & str , stderr : & str )
16
16
{
17
17
if !stderr. is_empty ( )
18
18
{
19
19
for trace_line in stderr. lines ( ) {
20
20
if let Result :: Ok ( json_obj) = serde_json:: from_str :: < Value > ( trace_line) {
21
21
if let Some ( msg) = json_obj. get ( "Error" ) {
22
- error ! ( "{}" , msg. as_str( ) . unwrap_or_default( ) ) ;
22
+ error ! ( "Process {process_name}: {}" , msg. as_str( ) . unwrap_or_default( ) ) ;
23
23
} else if let Some ( msg) = json_obj. get ( "Warning" ) {
24
- warn ! ( "{}" , msg. as_str( ) . unwrap_or_default( ) ) ;
24
+ warn ! ( "Process {process_name}: {}" , msg. as_str( ) . unwrap_or_default( ) ) ;
25
25
} else if let Some ( msg) = json_obj. get ( "Info" ) {
26
- info ! ( "{}" , msg. as_str( ) . unwrap_or_default( ) ) ;
26
+ info ! ( "Process {process_name}: {}" , msg. as_str( ) . unwrap_or_default( ) ) ;
27
27
} else if let Some ( msg) = json_obj. get ( "Debug" ) {
28
- debug ! ( "{}" , msg. as_str( ) . unwrap_or_default( ) ) ;
28
+ debug ! ( "Process {process_name}: {}" , msg. as_str( ) . unwrap_or_default( ) ) ;
29
29
} else if let Some ( msg) = json_obj. get ( "Trace" ) {
30
- trace ! ( "{}" , msg. as_str( ) . unwrap_or_default( ) ) ;
30
+ trace ! ( "Process {process_name}: {}" , msg. as_str( ) . unwrap_or_default( ) ) ;
31
31
} ;
32
32
} ;
33
33
}
@@ -54,12 +54,7 @@ pub fn invoke_get(resource: &ResourceManifest, cwd: &str, filter: &str) -> Resul
54
54
}
55
55
56
56
info ! ( "Invoking get '{}' using '{}'" , & resource. resource_type, & resource. get. executable) ;
57
- let ( exit_code, stdout, stderr) = invoke_command ( & resource. get . executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
58
- log_resource_traces ( & stderr) ;
59
- if exit_code != 0 {
60
- return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, stderr) ) ;
61
- }
62
-
57
+ let ( _exit_code, stdout, stderr) = invoke_command ( & resource. get . executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
63
58
if resource. kind == Some ( Kind :: Resource ) {
64
59
debug ! ( "Verifying output of get '{}' using '{}'" , & resource. resource_type, & resource. get. executable) ;
65
60
verify_json ( resource, cwd, & stdout) ?;
@@ -131,10 +126,6 @@ pub fn invoke_set(resource: &ResourceManifest, cwd: &str, desired: &str, skip_te
131
126
132
127
info ! ( "Getting current state for set by invoking get {} using {}" , & resource. resource_type, & resource. get. executable) ;
133
128
let ( exit_code, stdout, stderr) = invoke_command ( & resource. get . executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
134
- log_resource_traces ( & stderr) ;
135
- if exit_code != 0 {
136
- return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, stderr) ) ;
137
- }
138
129
139
130
if resource. kind == Some ( Kind :: Resource ) {
140
131
debug ! ( "Verifying output of get '{}' using '{}'" , & resource. resource_type, & resource. get. executable) ;
@@ -165,10 +156,6 @@ pub fn invoke_set(resource: &ResourceManifest, cwd: &str, desired: &str, skip_te
165
156
166
157
info ! ( "Invoking set '{}' using '{}'" , & resource. resource_type, & set. executable) ;
167
158
let ( exit_code, stdout, stderr) = invoke_command ( & set. executable , args, input_desired, Some ( cwd) , env) ?;
168
- log_resource_traces ( & stderr) ;
169
- if exit_code != 0 {
170
- return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, stderr) ) ;
171
- }
172
159
173
160
match set. returns {
174
161
Some ( ReturnKind :: State ) => {
@@ -260,10 +247,6 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
260
247
261
248
info ! ( "Invoking test '{}' using '{}'" , & resource. resource_type, & test. executable) ;
262
249
let ( exit_code, stdout, stderr) = invoke_command ( & test. executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
263
- log_resource_traces ( & stderr) ;
264
- if exit_code != 0 {
265
- return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, stderr) ) ;
266
- }
267
250
268
251
if resource. kind == Some ( Kind :: Resource ) {
269
252
debug ! ( "Verifying output of test '{}' using '{}'" , & resource. resource_type, & test. executable) ;
@@ -377,11 +360,7 @@ pub fn invoke_delete(resource: &ResourceManifest, cwd: &str, filter: &str) -> Re
377
360
let command_input = get_command_input ( & delete. input , filter) ?;
378
361
379
362
info ! ( "Invoking delete '{}' using '{}'" , & resource. resource_type, & delete. executable) ;
380
- let ( exit_code, _stdout, stderr) = invoke_command ( & delete. executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
381
- log_resource_traces ( & stderr) ;
382
- if exit_code != 0 {
383
- return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, stderr) ) ;
384
- }
363
+ let ( _exit_code, _stdout, _stderr) = invoke_command ( & delete. executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
385
364
386
365
Ok ( ( ) )
387
366
}
@@ -412,12 +391,7 @@ pub fn invoke_validate(resource: &ResourceManifest, cwd: &str, config: &str) ->
412
391
let command_input = get_command_input ( & validate. input , config) ?;
413
392
414
393
info ! ( "Invoking validate '{}' using '{}'" , & resource. resource_type, & validate. executable) ;
415
- let ( exit_code, stdout, stderr) = invoke_command ( & validate. executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
416
- log_resource_traces ( & stderr) ;
417
- if exit_code != 0 {
418
- return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, stderr) ) ;
419
- }
420
-
394
+ let ( _exit_code, stdout, _stderr) = invoke_command ( & validate. executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
421
395
let result: ValidateResult = serde_json:: from_str ( & stdout) ?;
422
396
Ok ( result)
423
397
}
@@ -438,11 +412,7 @@ pub fn get_schema(resource: &ResourceManifest, cwd: &str) -> Result<String, DscE
438
412
439
413
match schema_kind {
440
414
SchemaKind :: Command ( ref command) => {
441
- let ( exit_code, stdout, stderr) = invoke_command ( & command. executable , command. args . clone ( ) , None , Some ( cwd) , None ) ?;
442
- log_resource_traces ( & stderr) ;
443
- if exit_code != 0 {
444
- return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, stderr) ) ;
445
- }
415
+ let ( _exit_code, stdout, _stderr) = invoke_command ( & command. executable , command. args . clone ( ) , None , Some ( cwd) , None ) ?;
446
416
Ok ( stdout)
447
417
} ,
448
418
SchemaKind :: Embedded ( ref schema) => {
@@ -499,11 +469,7 @@ pub fn invoke_export(resource: &ResourceManifest, cwd: &str, input: Option<&str>
499
469
args = process_args ( & export. args , "" ) ;
500
470
}
501
471
502
- let ( exit_code, stdout, stderr) = invoke_command ( & export. executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
503
- log_resource_traces ( & stderr) ;
504
- if exit_code != 0 {
505
- return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, stderr) ) ;
506
- }
472
+ let ( _exit_code, stdout, stderr) = invoke_command ( & export. executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env ) ?;
507
473
let mut instances: Vec < Value > = Vec :: new ( ) ;
508
474
for line in stdout. lines ( )
509
475
{
@@ -594,7 +560,13 @@ pub fn invoke_command(executable: &str, args: Option<Vec<String>>, input: Option
594
560
}
595
561
if !stderr. is_empty ( ) {
596
562
trace ! ( "STDERR returned: {}" , & stderr) ;
563
+ log_resource_traces ( executable, & stderr) ;
597
564
}
565
+
566
+ if exit_code != 0 {
567
+ return Err ( DscError :: Command ( executable. to_string ( ) , exit_code, stderr) ) ;
568
+ }
569
+
598
570
Ok ( ( exit_code, stdout, stderr) )
599
571
}
600
572
0 commit comments