winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }