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

Method discover_adapted_resources

lib/dsc-lib/src/discovery/command_discovery.rs:353–442  ·  view source on GitHub ↗
(
        &mut self,
        name_filter: &TypeNameFilter,
        adapter_filter: &TypeNameFilter
    )

Source from the content-addressed store, hash-verified

351 }
352
353 fn discover_adapted_resources(
354 &mut self,
355 name_filter: &TypeNameFilter,
356 adapter_filter: &TypeNameFilter
357 ) -> Result<(), DscError> {
358 if self.discovery_mode == ResourceDiscoveryMode::DuringDeployment || (locked_is_empty!(RESOURCES) && locked_is_empty!(ADAPTERS)) {
359 self.discover(&DiscoveryKind::Resource, &TypeNameFilter::default())?;
360 }
361
362 if locked_is_empty!(ADAPTERS) {
363 return Ok(());
364 }
365
366 let adapters = locked_clone!(ADAPTERS);
367 debug!("Using type name filter '{adapter_filter}' as filter for adapter name");
368
369 debug!("Using type name filter '{name_filter}' as filter for resource name");
370
371 let mut progress = ProgressBar::new(adapters.len() as u64, self.progress_format)?;
372 progress.write_activity("Searching for adapted resources");
373
374 let mut adapted_resources = DiscoveryResourceCache::new();
375
376 let mut found_adapter: bool = false;
377 for (adapter_name, adapters) in &adapters {
378 for adapter in adapters {
379 progress.write_increment(1);
380
381 if !adapter_filter.is_match(adapter_name) {
382 continue;
383 }
384
385 found_adapter = true;
386 let mut adapter_progress = ProgressBar::new(1, self.progress_format)?;
387 adapter_progress.write_activity(format!("Enumerating resources for adapter '{adapter_name}'").as_str());
388 let Some(manifest) = &adapter.manifest else {
389 return Err(DscError::MissingManifest(adapter_name.to_string()));
390 };
391
392 let mut adapter_resources_count = 0;
393 // invoke the list command
394 let list_command = &manifest.adapter.clone().unwrap().list;
395 let (exit_code, stdout, stderr) = match invoke_command(&list_command.executable, list_command.args.clone(), None, Some(&adapter.directory), None, manifest.exit_codes.as_ref())
396 {
397 Ok((exit_code, stdout, stderr)) => (exit_code, stdout, stderr),
398 Err(e) => {
399 // In case of error, log and continue
400 warn!("{e}");
401 continue;
402 },
403 };
404
405 if exit_code != 0 {
406 // in case of failure, log and continue
407 warn!("Adapter failed to list resources with exit code {exit_code}: {stderr}");
408 continue;
409 }
410

Callers 2

list_availableMethod · 0.80
find_resourcesMethod · 0.80

Calls 10

insert_resourceFunction · 0.85
write_activityMethod · 0.80
write_incrementMethod · 0.80
as_strMethod · 0.80
defaultFunction · 0.50
newFunction · 0.50
invoke_commandFunction · 0.50
discoverMethod · 0.45
is_matchMethod · 0.45
as_refMethod · 0.45

Tested by

no test coverage detected