|
3 | 3 |
|
4 | 4 | use crate::configure::config_doc::{ExecutionKind, Metadata, Resource, Parameter}; |
5 | 5 | use crate::configure::context::{Context, ProcessMode}; |
6 | | -use crate::configure::{config_doc::RestartRequired, parameters::Input}; |
| 6 | +use crate::configure::{config_doc::{IntOrExpression, RestartRequired}, parameters::Input}; |
7 | 7 | use crate::discovery::discovery_trait::DiscoveryFilter; |
8 | 8 | use crate::dscerror::DscError; |
9 | 9 | use crate::dscresources::{ |
@@ -779,7 +779,7 @@ impl Configurator { |
779 | 779 | if let Some(parameters_input) = parameters_input { |
780 | 780 | trace!("parameters_input: {parameters_input}"); |
781 | 781 | let input_parameters: HashMap<String, Value> = serde_json::from_value::<Input>(parameters_input.clone())?.parameters; |
782 | | - |
| 782 | + |
783 | 783 | for (name, value) in input_parameters { |
784 | 784 | if let Some(constraint) = parameters.get(&name) { |
785 | 785 | debug!("Validating parameter '{name}'"); |
@@ -818,7 +818,7 @@ impl Configurator { |
818 | 818 |
|
819 | 819 | while !unresolved_parameters.is_empty() { |
820 | 820 | let mut resolved_in_this_pass = Vec::new(); |
821 | | - |
| 821 | + |
822 | 822 | for (name, parameter) in &unresolved_parameters { |
823 | 823 | debug!("{}", t!("configure.mod.processingParameter", name = name)); |
824 | 824 | if let Some(default_value) = ¶meter.default_value { |
@@ -962,7 +962,16 @@ impl Configurator { |
962 | 962 | self.context.process_mode = ProcessMode::Copy; |
963 | 963 | self.context.copy_current_loop_name.clone_from(©.name); |
964 | 964 | let mut copy_resources = Vec::<Resource>::new(); |
965 | | - for i in 0..copy.count { |
| 965 | + let count: i64 = match ©.count { |
| 966 | + IntOrExpression::Int(i) => *i, |
| 967 | + IntOrExpression::Expression(e) => { |
| 968 | + let Value::Number(n) = self.statement_parser.parse_and_execute(e, &self.context)? else { |
| 969 | + return Err(DscError::Parser(t!("configure.mod.copyCountResultNotInteger", expression = e).to_string())) |
| 970 | + }; |
| 971 | + n.as_i64().ok_or_else(|| DscError::Parser(t!("configure.mod.copyCountResultNotInteger", expression = e).to_string()))? |
| 972 | + }, |
| 973 | + }; |
| 974 | + for i in 0..count { |
966 | 975 | self.context.copy.insert(copy.name.clone(), i); |
967 | 976 | let mut new_resource = resource.clone(); |
968 | 977 | let Value::String(new_name) = self.statement_parser.parse_and_execute(&resource.name, &self.context)? else { |
|
0 commit comments