Skip to content

Commit 11c0786

Browse files
authored
Attempt to use DSCv3 resources even if they were not found (#5443)
## Change Even if not found, attempt to use DSCv3 resources. This is largely to avoid PowerShell/DSC#786, which only seems to affect dsc.exe's ability to run processes when listing adapted resources. Also applies the `DiagnosticTraceEnabled` state to the elevated processor. This is set when the config logging area is enabled and set to verbose.
1 parent e9f5f3b commit 11c0786

File tree

6 files changed

+15
-8
lines changed

6 files changed

+15
-8
lines changed

src/AppInstallerCLICore/ConfigurationDynamicRuntimeFactory.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,9 @@ namespace AppInstaller::CLI::ConfigurationRemoting
435435
strong_this->m_dynamicFactory->SendDiagnostics(information);
436436
}
437437
});
438+
439+
winrt::hstring propertyName = ConfigurationRemoting::ToHString(ConfigurationRemoting::PropertyName::DiagnosticTraceEnabled);
440+
factory.as<Collections::IMap<winrt::hstring, winrt::hstring>>().Insert(propertyName, m_dynamicFactory->GetFactoryMapValue(propertyName));
438441
}
439442

440443
return m_setProcessors.emplace(integrityLevel, DynamicProcessorInfo{ factory, factory.CreateSetProcessor(m_configurationSet), std::move(factoryDiagnosticsEventRevoker) }).first;

src/AppInstallerCLICore/ConfigurationSetProcessorFactoryRemoting.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -300,12 +300,14 @@ namespace AppInstaller::CLI::ConfigurationRemoting
300300

301301
bool Insert(winrt::hstring key, winrt::hstring value)
302302
{
303-
return m_remoteFactory.as<Collections::IMap<winrt::hstring, winrt::hstring>>().Insert(key, value);
303+
auto map = m_remoteFactory.try_as<Collections::IMap<winrt::hstring, winrt::hstring>>();
304+
return map ? map.Insert(key, value) : false;
304305
}
305306

306307
winrt::hstring Lookup(winrt::hstring key)
307308
{
308-
return m_remoteFactory.as<Collections::IMap<winrt::hstring, winrt::hstring>>().Lookup(key);
309+
auto map = m_remoteFactory.try_as<Collections::IMap<winrt::hstring, winrt::hstring>>();
310+
return map ? map.Lookup(key) : winrt::hstring{};
309311
}
310312

311313
HRESULT STDMETHODCALLTYPE SetLifetimeWatcher(IUnknown* watcher)

src/Microsoft.Management.Configuration.Processor/DSCv3/Helpers/ProcessorRunSettings.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ public static ProcessorRunSettings CreateFromFindUnitProcessorsOptions(FindUnitP
4747
/// </summary>
4848
/// <param name="resourceDetails">The resource details to be used.</param>
4949
/// <returns>A ProcessorRunSettings.</returns>
50-
public static ProcessorRunSettings CreateFromResourceDetails(ResourceDetails resourceDetails)
50+
public static ProcessorRunSettings CreateFromResourceDetails(ResourceDetails? resourceDetails)
5151
{
5252
return new ProcessorRunSettings
5353
{
54-
ResourceSearchPaths = Path.GetDirectoryName(resourceDetails.Path) ?? string.Empty,
54+
ResourceSearchPaths = Path.GetDirectoryName(resourceDetails?.Path) ?? string.Empty,
5555
ResourceSearchPathsExclusive = false,
5656
};
5757
}

src/Microsoft.Management.Configuration.Processor/DSCv3/Set/DSCv3ConfigurationSetProcessor.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ protected override IConfigurationUnitProcessor CreateUnitProcessorInternal(Confi
4141
if (resourceDetails == null)
4242
{
4343
this.OnDiagnostics(DiagnosticLevel.Verbose, $"Resource not found: {configurationUnitInternal.QualifiedName}");
44-
throw new Exceptions.FindDscResourceNotFoundException(configurationUnitInternal.QualifiedName, null);
44+
45+
// Don't throw when the resource is not found until https://github.com/PowerShell/DSC/issues/786 is resolved
46+
// throw new Exceptions.FindDscResourceNotFoundException(configurationUnitInternal.QualifiedName, null);
4547
}
4648

4749
return new DSCv3ConfigurationUnitProcessor(this.processorSettings, resourceDetails, configurationUnitInternal, this.IsLimitMode) { SetProcessorFactory = this.SetProcessorFactory };

src/Microsoft.Management.Configuration.Processor/DSCv3/Unit/DSCv3ConfigurationUnitProcessor.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ namespace Microsoft.Management.Configuration.Processor.DSCv3.Unit
2121
internal sealed partial class DSCv3ConfigurationUnitProcessor : ConfigurationUnitProcessorBase, IConfigurationUnitProcessor, IGetAllSettingsConfigurationUnitProcessor, IGetAllUnitsConfigurationUnitProcessor, IDiagnosticsSink
2222
{
2323
private readonly ProcessorSettings processorSettings;
24-
private readonly ResourceDetails resourceDetails;
24+
private readonly ResourceDetails? resourceDetails;
2525

2626
/// <summary>
2727
/// Initializes a new instance of the <see cref="DSCv3ConfigurationUnitProcessor"/> class.
@@ -30,7 +30,7 @@ internal sealed partial class DSCv3ConfigurationUnitProcessor : ConfigurationUni
3030
/// <param name="resourceDetails">The resource to use.</param>
3131
/// <param name="unitInternal">Internal unit.</param>
3232
/// <param name="isLimitMode">Whether it is under limit mode.</param>
33-
internal DSCv3ConfigurationUnitProcessor(ProcessorSettings processorSettings, ResourceDetails resourceDetails, ConfigurationUnitInternal unitInternal, bool isLimitMode = false)
33+
internal DSCv3ConfigurationUnitProcessor(ProcessorSettings processorSettings, ResourceDetails? resourceDetails, ConfigurationUnitInternal unitInternal, bool isLimitMode = false)
3434
: base(unitInternal, isLimitMode)
3535
{
3636
this.processorSettings = processorSettings;

src/Microsoft.Management.Configuration.UnitTests/Tests/DSCv3ProcessorTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void Set_UnitPropertyDetailsCached()
9393
/// <summary>
9494
/// Test for unit processor creation requiring resource to be found.
9595
/// </summary>
96-
[Fact]
96+
[Fact(Skip = "Disable this test while we have the bypass in place")]
9797
public void Set_ResourceNotFoundIsError()
9898
{
9999
var (factory, dsc) = CreateTestFactory();

0 commit comments

Comments
 (0)