@@ -7,7 +7,7 @@ use rust_i18n::t;
77use serde:: Deserialize ;
88use serde_json:: { Map , Value } ;
99use std:: { collections:: HashMap , env, path:: Path , process:: Stdio } ;
10- use crate :: { configure:: { config_doc:: ExecutionKind , config_result:: { ResourceGetResult , ResourceTestResult } } , util:: canonicalize_which} ;
10+ use crate :: { configure:: { config_doc:: ExecutionKind , config_result:: { ResourceGetResult , ResourceTestResult } } , types :: FullyQualifiedTypeName , util:: canonicalize_which} ;
1111use crate :: dscerror:: DscError ;
1212use super :: { dscresource:: { get_diff, redact} , invoke_result:: { ExportResult , GetResult , ResolveResult , SetResult , TestResult , ValidateResult , ResourceGetResponse , ResourceSetResponse , ResourceTestResponse , get_in_desired_state} , resource_manifest:: { ArgKind , InputKind , Kind , ResourceManifest , ReturnKind , SchemaKind } } ;
1313use tracing:: { error, warn, info, debug, trace} ;
@@ -25,17 +25,17 @@ pub const EXIT_PROCESS_TERMINATED: i32 = 0x102;
2525/// # Errors
2626///
2727/// Error returned if the resource does not successfully get the current state
28- pub fn invoke_get ( resource : & ResourceManifest , cwd : & Path , filter : & str , target_resource : Option < & str > ) -> Result < GetResult , DscError > {
28+ pub fn invoke_get ( resource : & ResourceManifest , cwd : & Path , filter : & str , target_resource : Option < FullyQualifiedTypeName > ) -> Result < GetResult , DscError > {
2929 debug ! ( "{}" , t!( "dscresources.commandResource.invokeGet" , resource = & resource. resource_type) ) ;
3030 let mut command_input = CommandInput { env : None , stdin : None } ;
3131 let Some ( get) = & resource. get else {
3232 return Err ( DscError :: NotImplemented ( "get" . to_string ( ) ) ) ;
3333 } ;
3434 let resource_type = match target_resource {
3535 Some ( r) => r,
36- None => & resource. resource_type ,
36+ None => resource. resource_type . clone ( ) ,
3737 } ;
38- let args = process_args ( get. args . as_ref ( ) , filter, resource_type) ;
38+ let args = process_args ( get. args . as_ref ( ) , filter, & resource_type) ;
3939 if !filter. is_empty ( ) {
4040 verify_json ( resource, cwd, filter) ?;
4141 command_input = get_command_input ( get. input . as_ref ( ) , filter) ?;
@@ -78,7 +78,7 @@ pub fn invoke_get(resource: &ResourceManifest, cwd: &Path, filter: &str, target_
7878///
7979/// Error returned if the resource does not successfully set the desired state
8080#[ allow( clippy:: too_many_lines) ]
81- pub fn invoke_set ( resource : & ResourceManifest , cwd : & Path , desired : & str , skip_test : bool , execution_type : & ExecutionKind , target_resource : Option < & str > ) -> Result < SetResult , DscError > {
81+ pub fn invoke_set ( resource : & ResourceManifest , cwd : & Path , desired : & str , skip_test : bool , execution_type : & ExecutionKind , target_resource : Option < FullyQualifiedTypeName > ) -> Result < SetResult , DscError > {
8282 debug ! ( "{}" , t!( "dscresources.commandResource.invokeSet" , resource = & resource. resource_type) ) ;
8383 let operation_type: String ;
8484 let mut is_synthetic_what_if = false ;
@@ -105,7 +105,7 @@ pub fn invoke_set(resource: &ResourceManifest, cwd: &Path, desired: &str, skip_t
105105 // if resource doesn't implement a pre-test, we execute test first to see if a set is needed
106106 if !skip_test && set. pre_test != Some ( true ) {
107107 info ! ( "{}" , t!( "dscresources.commandResource.noPretest" , resource = & resource. resource_type) ) ;
108- let test_result = invoke_test ( resource, cwd, desired, target_resource) ?;
108+ let test_result = invoke_test ( resource, cwd, desired, target_resource. clone ( ) ) ?;
109109 if is_synthetic_what_if {
110110 return Ok ( test_result. into ( ) ) ;
111111 }
@@ -140,11 +140,11 @@ pub fn invoke_set(resource: &ResourceManifest, cwd: &Path, desired: &str, skip_t
140140 let Some ( get) = & resource. get else {
141141 return Err ( DscError :: NotImplemented ( "get" . to_string ( ) ) ) ;
142142 } ;
143- let resource_type = match target_resource {
143+ let resource_type = match target_resource. clone ( ) {
144144 Some ( r) => r,
145- None => & resource. resource_type ,
145+ None => resource. resource_type . clone ( ) ,
146146 } ;
147- let args = process_args ( get. args . as_ref ( ) , desired, resource_type) ;
147+ let args = process_args ( get. args . as_ref ( ) , desired, & resource_type) ;
148148 let command_input = get_command_input ( get. input . as_ref ( ) , desired) ?;
149149
150150 info ! ( "{}" , t!( "dscresources.commandResource.setGetCurrent" , resource = & resource. resource_type, executable = & get. executable) ) ;
@@ -176,7 +176,7 @@ pub fn invoke_set(resource: &ResourceManifest, cwd: &Path, desired: &str, skip_t
176176
177177 let mut env: Option < HashMap < String , String > > = None ;
178178 let mut input_desired: Option < & str > = None ;
179- let args = process_args ( set. args . as_ref ( ) , desired, resource_type) ;
179+ let args = process_args ( set. args . as_ref ( ) , desired, & resource_type) ;
180180 match & set. input {
181181 Some ( InputKind :: Env ) => {
182182 env = Some ( json_to_hashmap ( desired) ?) ;
@@ -271,7 +271,7 @@ pub fn invoke_set(resource: &ResourceManifest, cwd: &Path, desired: &str, skip_t
271271/// # Errors
272272///
273273/// Error is returned if the underlying command returns a non-zero exit code.
274- pub fn invoke_test ( resource : & ResourceManifest , cwd : & Path , expected : & str , target_resource : Option < & str > ) -> Result < TestResult , DscError > {
274+ pub fn invoke_test ( resource : & ResourceManifest , cwd : & Path , expected : & str , target_resource : Option < FullyQualifiedTypeName > ) -> Result < TestResult , DscError > {
275275 debug ! ( "{}" , t!( "dscresources.commandResource.invokeTest" , resource = & resource. resource_type) ) ;
276276 let Some ( test) = & resource. test else {
277277 info ! ( "{}" , t!( "dscresources.commandResource.testSyntheticTest" , resource = & resource. resource_type) ) ;
@@ -280,11 +280,11 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &Path, expected: &str, targ
280280
281281 verify_json ( resource, cwd, expected) ?;
282282
283- let resource_type = match target_resource {
283+ let resource_type = match target_resource. clone ( ) {
284284 Some ( r) => r,
285- None => & resource. resource_type ,
285+ None => resource. resource_type . clone ( ) ,
286286 } ;
287- let args = process_args ( test. args . as_ref ( ) , expected, resource_type) ;
287+ let args = process_args ( test. args . as_ref ( ) , expected, & resource_type) ;
288288 let command_input = get_command_input ( test. input . as_ref ( ) , expected) ?;
289289
290290 info ! ( "{}" , t!( "dscresources.commandResource.invokeTestUsing" , resource = & resource. resource_type, executable = & test. executable) ) ;
@@ -380,7 +380,7 @@ fn get_desired_state(actual: &Value) -> Result<Option<bool>, DscError> {
380380 Ok ( in_desired_state)
381381}
382382
383- fn invoke_synthetic_test ( resource : & ResourceManifest , cwd : & Path , expected : & str , target_resource : Option < & str > ) -> Result < TestResult , DscError > {
383+ fn invoke_synthetic_test ( resource : & ResourceManifest , cwd : & Path , expected : & str , target_resource : Option < FullyQualifiedTypeName > ) -> Result < TestResult , DscError > {
384384 let get_result = invoke_get ( resource, cwd, expected, target_resource) ?;
385385 let actual_state = match get_result {
386386 GetResult :: Group ( results) => {
@@ -511,7 +511,7 @@ pub fn get_schema(resource: &ResourceManifest, cwd: &Path) -> Result<String, Dsc
511511/// # Errors
512512///
513513/// Error returned if the resource does not successfully export the current state
514- pub fn invoke_export ( resource : & ResourceManifest , cwd : & Path , input : Option < & str > , target_resource : Option < & str > ) -> Result < ExportResult , DscError > {
514+ pub fn invoke_export ( resource : & ResourceManifest , cwd : & Path , input : Option < & str > , target_resource : Option < FullyQualifiedTypeName > ) -> Result < ExportResult , DscError > {
515515 let Some ( export) = resource. export . as_ref ( ) else {
516516 // see if get is supported and use that instead
517517 if resource. get . is_some ( ) {
@@ -540,7 +540,7 @@ pub fn invoke_export(resource: &ResourceManifest, cwd: &Path, input: Option<&str
540540 let args: Option < Vec < String > > ;
541541 let resource_type = match target_resource {
542542 Some ( r) => r,
543- None => & resource. resource_type ,
543+ None => resource. resource_type . clone ( ) ,
544544 } ;
545545 if let Some ( input) = input {
546546 if !input. is_empty ( ) {
@@ -549,9 +549,9 @@ pub fn invoke_export(resource: &ResourceManifest, cwd: &Path, input: Option<&str
549549 command_input = get_command_input ( export. input . as_ref ( ) , input) ?;
550550 }
551551
552- args = process_args ( export. args . as_ref ( ) , input, resource_type) ;
552+ args = process_args ( export. args . as_ref ( ) , input, & resource_type) ;
553553 } else {
554- args = process_args ( export. args . as_ref ( ) , "" , resource_type) ;
554+ args = process_args ( export. args . as_ref ( ) , "" , & resource_type) ;
555555 }
556556
557557 let ( _exit_code, stdout, stderr) = invoke_command ( & export. executable , args, command_input. stdin . as_deref ( ) , Some ( cwd) , command_input. env , resource. exit_codes . as_ref ( ) ) ?;
0 commit comments