4
4
use jsonschema:: JSONSchema ;
5
5
use serde_json:: Value ;
6
6
use std:: { collections:: HashMap , env, process:: Stdio } ;
7
- use crate :: { configure:: { config_doc:: ExecutionKind , { config_result:: ResourceGetResult , parameters , Configurator } } , util :: parse_input_to_json } ;
7
+ use crate :: configure:: { config_doc:: ExecutionKind , config_result:: { ResourceGetResult , ResourceTestResult } } ;
8
8
use crate :: dscerror:: DscError ;
9
9
use super :: { dscresource:: get_diff, invoke_result:: { ExportResult , GetResult , ResolveResult , SetResult , TestResult , ValidateResult , ResourceGetResponse , ResourceSetResponse , ResourceTestResponse , get_in_desired_state} , resource_manifest:: { ArgKind , InputKind , Kind , ResourceManifest , ReturnKind , SchemaKind } } ;
10
10
use tracing:: { error, warn, info, debug, trace} ;
11
11
use tokio:: { io:: { AsyncBufReadExt , AsyncWriteExt , BufReader } , process:: Command } ;
12
12
13
13
pub const EXIT_PROCESS_TERMINATED : i32 = 0x102 ;
14
14
15
- fn get_configurator ( resource : & ResourceManifest , cwd : & str , filter : & str ) -> Result < Configurator , DscError > {
16
- let resolve_result = invoke_resolve ( resource, cwd, filter) ?;
17
- let configuration = serde_json:: to_string ( & resolve_result. configuration ) ?;
18
- let configuration_json = parse_input_to_json ( & configuration) ?;
19
- let mut configurator = Configurator :: new ( & configuration_json) ?;
20
- let parameters = if let Some ( parameters) = resolve_result. parameters {
21
- let parameters_input = parameters:: Input {
22
- parameters,
23
- } ;
24
- Some ( serde_json:: to_value ( parameters_input) ?)
25
- } else {
26
- None
27
- } ;
28
- configurator. set_parameters ( & parameters) ?;
29
- Ok ( configurator)
30
- }
31
-
32
15
/// Invoke the get operation on a resource
33
16
///
34
17
/// # Arguments
@@ -41,12 +24,6 @@ fn get_configurator(resource: &ResourceManifest, cwd: &str, filter: &str) -> Res
41
24
/// Error returned if the resource does not successfully get the current state
42
25
pub fn invoke_get ( resource : & ResourceManifest , cwd : & str , filter : & str ) -> Result < GetResult , DscError > {
43
26
debug ! ( "Invoking get for '{}'" , & resource. resource_type) ;
44
- if resource. kind == Some ( Kind :: Import ) {
45
- let mut configurator = get_configurator ( resource, cwd, filter) ?;
46
- let config_result = configurator. invoke_get ( ) ?;
47
- return Ok ( GetResult :: Group ( config_result. results ) ) ;
48
- }
49
-
50
27
let mut command_input = CommandInput { env : None , stdin : None } ;
51
28
let Some ( get) = & resource. get else {
52
29
return Err ( DscError :: NotImplemented ( "get" . to_string ( ) ) ) ;
@@ -96,12 +73,6 @@ pub fn invoke_get(resource: &ResourceManifest, cwd: &str, filter: &str) -> Resul
96
73
#[ allow( clippy:: too_many_lines) ]
97
74
pub fn invoke_set ( resource : & ResourceManifest , cwd : & str , desired : & str , skip_test : bool , execution_type : & ExecutionKind ) -> Result < SetResult , DscError > {
98
75
debug ! ( "Invoking set for '{}'" , & resource. resource_type) ;
99
- if resource. kind == Some ( Kind :: Import ) {
100
- let mut configurator = get_configurator ( resource, cwd, desired) ?;
101
- let config_result = configurator. invoke_set ( skip_test) ?;
102
- return Ok ( SetResult :: Group ( config_result. results ) ) ;
103
- }
104
-
105
76
let operation_type: String ;
106
77
let mut is_synthetic_what_if = false ;
107
78
let set_method = match execution_type {
@@ -276,12 +247,6 @@ pub fn invoke_set(resource: &ResourceManifest, cwd: &str, desired: &str, skip_te
276
247
/// Error is returned if the underlying command returns a non-zero exit code.
277
248
pub fn invoke_test ( resource : & ResourceManifest , cwd : & str , expected : & str ) -> Result < TestResult , DscError > {
278
249
debug ! ( "Invoking test for '{}'" , & resource. resource_type) ;
279
- if resource. kind == Some ( Kind :: Import ) {
280
- let mut configurator = get_configurator ( resource, cwd, expected) ?;
281
- let config_result = configurator. invoke_test ( ) ?;
282
- return Ok ( TestResult :: Group ( config_result. results ) ) ;
283
- }
284
-
285
250
let Some ( test) = & resource. test else {
286
251
info ! ( "Resource '{}' does not implement test, performing synthetic test" , & resource. resource_type) ;
287
252
return invoke_synthetic_test ( resource, cwd, expected) ;
@@ -300,6 +265,12 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
300
265
verify_json ( resource, cwd, & stdout) ?;
301
266
}
302
267
268
+ if resource. kind == Some ( Kind :: Import ) {
269
+ debug ! ( "Import resource kind, returning group test response" ) ;
270
+ let group_test_response: Vec < ResourceTestResult > = serde_json:: from_str ( & stdout) ?;
271
+ return Ok ( TestResult :: Group ( group_test_response) ) ;
272
+ }
273
+
303
274
let expected_value: Value = serde_json:: from_str ( expected) ?;
304
275
match test. returns {
305
276
Some ( ReturnKind :: State ) => {
@@ -642,7 +613,7 @@ async fn run_process_async(executable: &str, args: Option<Vec<String>>, input: O
642
613
}
643
614
filtered_stderr
644
615
} ) ;
645
-
616
+
646
617
let exit_code = child_task. await . unwrap ( ) ?. code ( ) ;
647
618
let stdout_result = stdout_task. await . unwrap ( ) ;
648
619
let stderr_result = stderr_task. await . unwrap ( ) ;
@@ -676,7 +647,7 @@ async fn run_process_async(executable: &str, args: Option<Vec<String>>, input: O
676
647
/// * `cwd` - Optional working directory to execute the command in
677
648
/// * `env` - Optional environment variable mappings to add or update
678
649
/// * `exit_codes` - Optional descriptions of exit codes
679
- ///
650
+ ///
680
651
/// # Errors
681
652
///
682
653
/// Error is returned if the command fails to execute or stdin/stdout/stderr cannot be opened.
0 commit comments