DSCv3ConfigurationSetProcessor.cs (4762B)
1 // ----------------------------------------------------------------------------- 2 // <copyright file="DSCv3ConfigurationSetProcessor.cs" company="Microsoft Corporation"> 3 // Copyright (c) Microsoft Corporation. Licensed under the MIT License. 4 // </copyright> 5 // ----------------------------------------------------------------------------- 6 7 namespace Microsoft.Management.Configuration.Processor.DSCv3.Set 8 { 9 using System.Collections.Generic; 10 using Microsoft.Management.Configuration.Processor.DSCv3.Helpers; 11 using Microsoft.Management.Configuration.Processor.DSCv3.Unit; 12 using Microsoft.Management.Configuration.Processor.Helpers; 13 using Microsoft.Management.Configuration.Processor.Set; 14 15 /// <summary> 16 /// Configuration set processor. 17 /// </summary> 18 internal sealed partial class DSCv3ConfigurationSetProcessor : ConfigurationSetProcessorBase, IConfigurationSetProcessor, IFindUnitProcessorsSetProcessor 19 { 20 private readonly ProcessorSettings processorSettings; 21 22 /// <summary> 23 /// Initializes a new instance of the <see cref="DSCv3ConfigurationSetProcessor"/> class. 24 /// </summary> 25 /// <param name="processorSettings">The processor settings to use.</param> 26 /// <param name="configurationSet">Configuration set.</param> 27 /// <param name="isLimitMode">Whether the set processor should work in limitation mode.</param> 28 public DSCv3ConfigurationSetProcessor(ProcessorSettings processorSettings, ConfigurationSet? configurationSet, bool isLimitMode = false) 29 : base(configurationSet, isLimitMode) 30 { 31 this.processorSettings = processorSettings; 32 } 33 34 /// <inheritdoc /> 35 protected override IConfigurationUnitProcessor CreateUnitProcessorInternal(ConfigurationUnit unit) 36 { 37 ConfigurationUnitInternal configurationUnitInternal = new ConfigurationUnitInternal(unit, this.ConfigurationSet?.Path); 38 this.OnDiagnostics(DiagnosticLevel.Verbose, $"Creating unit processor for: {configurationUnitInternal.QualifiedName}..."); 39 40 ResourceDetails? resourceDetails = this.processorSettings.GetResourceDetails(configurationUnitInternal, ConfigurationUnitDetailFlags.Local); 41 if (resourceDetails == null) 42 { 43 this.OnDiagnostics(DiagnosticLevel.Verbose, $"Resource not found: {configurationUnitInternal.QualifiedName}"); 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); 47 } 48 49 return new DSCv3ConfigurationUnitProcessor(this.processorSettings, resourceDetails, configurationUnitInternal, this.IsLimitMode) { SetProcessorFactory = this.SetProcessorFactory }; 50 } 51 52 /// <inheritdoc /> 53 protected override IConfigurationUnitProcessorDetails? GetUnitProcessorDetailsInternal(ConfigurationUnit unit, ConfigurationUnitDetailFlags detailFlags) 54 { 55 ConfigurationUnitInternal configurationUnitInternal = new ConfigurationUnitInternal(unit, this.ConfigurationSet?.Path); 56 this.OnDiagnostics(DiagnosticLevel.Verbose, $"Getting resource details [{detailFlags}] for: {configurationUnitInternal.QualifiedName}..."); 57 58 ResourceDetails? resourceDetails = this.processorSettings.GetResourceDetails(configurationUnitInternal, detailFlags); 59 if (resourceDetails == null) 60 { 61 this.OnDiagnostics(DiagnosticLevel.Verbose, $"Resource not found: {configurationUnitInternal.QualifiedName}"); 62 return null; 63 } 64 65 return resourceDetails.GetConfigurationUnitProcessorDetails(); 66 } 67 68 /// <inheritdoc /> 69 protected override IList<IConfigurationUnitProcessorDetails> FindUnitProcessorsInternal(FindUnitProcessorsOptions findOptions) 70 { 71 this.OnDiagnostics(DiagnosticLevel.Verbose, $"Finding unit processors with following options. SearchPaths: {findOptions.SearchPaths}, SearchPathsExclusive: {findOptions.SearchPathsExclusive}, DetailFlags: [{findOptions.UnitDetailFlags}]"); 72 List<IConfigurationUnitProcessorDetails> result = new List<IConfigurationUnitProcessorDetails>(); 73 74 var resourceDetailsList = this.processorSettings.FindAllResourceDetails(findOptions); 75 foreach (var resourceDetails in resourceDetailsList) 76 { 77 result.Add(resourceDetails.GetConfigurationUnitProcessorDetails() !); 78 } 79 80 return result; 81 } 82 } 83 }