Skip to content

Commit b4bc177

Browse files
author
Steve Lee (POWERSHELL HE/HIM) (from Dev Box)
committed
Fix so that extension discovery failure doesn't fail entire discovery
1 parent c51be62 commit b4bc177

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

dsc/tests/dsc_extension_discover.tests.ps1

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,18 @@ Describe 'Discover extension tests' {
128128
}
129129
$foundWideLine | Should -BeTrue
130130
}
131+
132+
It 'Failed extension discovery should not fail overall discovery' -Skip:(!$IsWindows) {
133+
try {
134+
# exclude finding powershell.exe
135+
$oldPath = $env:PATH
136+
$env:PATH = $env:PATH="$env:PROGRAMFILES\PowerShell\7"
137+
$out = dsc resource list 2> $TestDrive/error.log | ConvertFrom-Json
138+
$LASTEXITCODE | Should -Be 0
139+
$out.Count | Should -BeGreaterThan 0
140+
(Get-Content -Path "$TestDrive/error.log" -Raw) | Should -BeLike "WARN Extension 'Microsoft.Windows.Appx/Discover' failed to discover resources: Command: Operation program not found for executable 'powershell'" -Because (Get-Content -Path "$TestDrive/error.log" -Raw | Out-String)
141+
} finally {
142+
$env:PATH = $oldPath
143+
}
144+
}
131145
}

dsc_lib/locales/en-us.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ searchingForResources = "Searching for resources: %{resources}"
110110
foundResourceWithVersion = "Found matching resource '%{resource}' version %{version}"
111111
foundNonAdapterResources = "Found %{count} non-adapter resources"
112112
resourceMissingRequireAdapter = "Resource '%{resource}' is missing 'require_adapter' field."
113+
extensionDiscoverFailed = "Extension '%{extension}' failed to discover resources: %{error}"
113114

114115
[dscresources.commandResource]
115116
invokeGet = "Invoking get for '%{resource}'"

dsc_lib/src/discovery/command_discovery.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,13 @@ impl ResourceDiscovery for CommandDiscovery {
310310
for extension in self.extensions.values() {
311311
if extension.capabilities.contains(&ExtensionCapability::Discover) {
312312
debug!("{}", t!("discovery.commandDiscovery.callingExtension", extension = extension.type_name));
313-
let discovered_resources = extension.discover()?;
313+
let discovered_resources = match extension.discover() {
314+
Ok(res) => res,
315+
Err(e) => {
316+
warn!("{}", t!("discovery.commandDiscovery.extensionDiscoverFailed", extension = extension.type_name, error = e).to_string());
317+
continue;
318+
}
319+
};
314320
debug!("{}", t!("discovery.commandDiscovery.extensionFoundResources", extension = extension.type_name, count = discovered_resources.len()));
315321
for resource in discovered_resources {
316322
if regex.is_match(&resource.type_name) {

0 commit comments

Comments
 (0)