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

Method invoke_set

lib/dsc-lib/src/configure/mod.rs:613–790  ·  view source on GitHub ↗
(&mut self, skip_test: bool)

Source from the content-addressed store, hash-verified

611 /// This function will return an error if the underlying resource fails.
612 #[allow(clippy::too_many_lines)]
613 pub fn invoke_set(&mut self, skip_test: bool) -> Result<ConfigurationSetResult, DscError> {
614 let mut result = ConfigurationSetResult::new();
615 self.context.operation = Some(Operation::Set);
616 let resources = get_resource_invocation_order(&self.config, &mut self.statement_parser, &mut self.context)?;
617 let mut progress = ProgressBar::new(resources.len() as u64, self.progress_format)?;
618 let discovery = &mut self.discovery.clone();
619 for resource in resources {
620 let evaluated_name = self.evaluate_resource_name(&resource.name)?;
621
622 progress.set_resource(&evaluated_name, &resource.resource_type);
623 progress.write_activity(format!("Set '{evaluated_name}'").as_str());
624 if self.skip_resource(&resource)? {
625 progress.write_increment(1);
626 continue;
627 }
628 let directive_security_context = resource.directives.as_ref().and_then(|d| d.security_context.as_ref());
629 check_security_context(resource.metadata.as_ref(), directive_security_context)?;
630 let adapter = get_require_adapter_from_directive(&resource.directives);
631 find_resource_or_error!(dsc_resource, discovery, resource, adapter);
632 let properties = self.get_properties(&resource, &dsc_resource.kind)?;
633 debug!("resource_type {}", &resource.resource_type);
634 // see if the properties contains `_exist` and is false
635 let exist = match &properties {
636 Some(property_map) => {
637 if let Some(exist) = property_map.get("_exist") {
638 !matches!(exist, Value::Bool(false))
639 } else {
640 true
641 }
642 },
643 _ => {
644 true
645 }
646 };
647
648 let desired = add_metadata(dsc_resource, properties, resource.metadata.clone())?;
649 trace!("{}", t!("configure.mod.desired", state = desired));
650
651 let start_datetime;
652 let end_datetime;
653 let mut set_result;
654 let mut delete_what_if_metadata: Option<DeleteResult> = None;
655 if exist || dsc_resource.capabilities.contains(&Capability::SetHandlesExist) {
656 debug!("{}", t!("configure.mod.handlesExist"));
657 start_datetime = chrono::Local::now();
658 set_result = match dsc_resource.set(&desired, skip_test, &self.context.execution_type) {
659 Ok(result) => result,
660 Err(e) => {
661 progress.set_failure(get_failure_from_error(&e));
662 progress.write_increment(1);
663 return Err(e);
664 },
665 };
666 end_datetime = chrono::Local::now();
667 } else if dsc_resource.capabilities.contains(&Capability::Delete) {
668 debug!("{}", t!("configure.mod.implementsDelete"));
669
670 let before_result = match dsc_resource.get(&desired) {

Callers 4

config_setFunction · 0.80
invoke_dsc_configMethod · 0.80

Calls 15

check_security_contextFunction · 0.85
add_metadataFunction · 0.85
get_failure_from_errorFunction · 0.85
get_diffFunction · 0.85
resource_idFunction · 0.85
get_metadata_from_resultFunction · 0.85
ArrayClass · 0.85
set_resourceMethod · 0.80
write_activityMethod · 0.80

Tested by

no test coverage detected