(
&mut self,
name_filter: &TypeNameFilter,
adapter_filter: &TypeNameFilter
)
| 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 |
no test coverage detected