MCPcopy Create free account
hub / github.com/PowerShell/DSC / validate_config

Method validate_config

lib/dsc-lib/src/configure/mod.rs:1196–1264  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

1194 }
1195
1196 fn validate_config(&mut self) -> Result<(), DscError> {
1197 let config: Configuration = serde_json::from_str(self.json.as_str())?;
1198 let config_security_context = if let Some(directives) = &config.directives {
1199 directives.security_context.clone()
1200 } else {
1201 None
1202 };
1203 check_security_context(config.metadata.as_ref(), config_security_context.as_ref())?;
1204
1205 if let Some(directives) = &config.directives
1206 && let Some(version_req) = &directives.version {
1207 let dsc_version = SemanticVersion::parse(env!("CARGO_PKG_VERSION"))?;
1208 if !version_req.matches(&dsc_version) {
1209 return Err(DscError::Validation(t!("configure.mod.versionNotSatisfied", required_version = version_req, current_version = env!("CARGO_PKG_VERSION")).to_string()));
1210 }
1211 }
1212
1213 let mut resource_discovery_mode = ResourceDiscoveryMode::PreDeployment;
1214 if let Some(directives) = &config.directives
1215 && let Some(resource_discovery_directive) = &directives.resource_discovery {
1216 resource_discovery_mode = resource_discovery_directive.clone();
1217 }
1218
1219 if resource_discovery_mode == ResourceDiscoveryMode::DuringDeployment {
1220 debug!("{}", t!("configure.mod.skippingResourceDiscovery"));
1221 self.discovery.refresh_cache = true;
1222 } else {
1223 // Perform discovery of resources used in config
1224 // create an array of DiscoveryFilter using the resource types and requireVersion from the config
1225 let mut discovery_filter: Vec<DiscoveryFilter> = Vec::new();
1226 let config_copy = config.clone();
1227 for resource in config_copy.resources {
1228 let adapter = get_require_adapter_from_directive(&resource.directives);
1229 let filter = DiscoveryFilter::new(
1230 &resource.resource_type,
1231 resource.require_version.clone(),
1232 adapter
1233 );
1234 if !discovery_filter.contains(&filter) {
1235 discovery_filter.push(filter);
1236 }
1237 // defer actual unrolling until parameters are available
1238 if let Some(copy) = &resource.copy {
1239 debug!("{}", t!("configure.mod.validateCopy", name = &copy.name, count = copy.count));
1240 if copy.mode.is_some() {
1241 return Err(DscError::Validation(t!("configure.mod.copyModeNotSupported").to_string()));
1242 }
1243 if copy.batch_size.is_some() {
1244 return Err(DscError::Validation(t!("configure.mod.copyBatchSizeNotSupported").to_string()));
1245 }
1246 }
1247 }
1248 self.discovery.find_resources(&discovery_filter, self.progress_format)?;
1249
1250 // now check that each resource in the config was found
1251 for resource in config.resources.iter() {
1252 let adapter = get_require_adapter_from_directive(&resource.directives);
1253 let Some(_dsc_resource) = self.discovery.find_resource(&DiscoveryFilter::new(&resource.resource_type, resource.require_version.clone(), adapter))? else {

Callers 1

newMethod · 0.80

Calls 10

check_security_contextFunction · 0.85
as_strMethod · 0.80
from_strFunction · 0.50
parseFunction · 0.50
newFunction · 0.50
as_refMethod · 0.45
matchesMethod · 0.45
find_resourcesMethod · 0.45
find_resourceMethod · 0.45

Tested by

no test coverage detected