DSCv3ConfigurationUnitProcessor.cs (4852B)
1 // ----------------------------------------------------------------------------- 2 // <copyright file="DSCv3ConfigurationUnitProcessor.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.Unit 8 { 9 using System; 10 using System.Collections.Generic; 11 using Microsoft.Management.Configuration; 12 using Microsoft.Management.Configuration.Processor.DSCv3.Helpers; 13 using Microsoft.Management.Configuration.Processor.Exceptions; 14 using Microsoft.Management.Configuration.Processor.Helpers; 15 using Microsoft.Management.Configuration.Processor.Unit; 16 using Windows.Foundation.Collections; 17 18 /// <summary> 19 /// Provides access to a specific configuration unit within the runtime. 20 /// </summary> 21 internal sealed partial class DSCv3ConfigurationUnitProcessor : ConfigurationUnitProcessorBase, IConfigurationUnitProcessor, IGetAllSettingsConfigurationUnitProcessor, IGetAllUnitsConfigurationUnitProcessor, IDiagnosticsSink 22 { 23 private readonly ProcessorSettings processorSettings; 24 private readonly ResourceDetails? resourceDetails; 25 26 /// <summary> 27 /// Initializes a new instance of the <see cref="DSCv3ConfigurationUnitProcessor"/> class. 28 /// </summary> 29 /// <param name="processorSettings">The processor settings to use.</param> 30 /// <param name="resourceDetails">The resource to use.</param> 31 /// <param name="unitInternal">Internal unit.</param> 32 /// <param name="isLimitMode">Whether it is under limit mode.</param> 33 internal DSCv3ConfigurationUnitProcessor(ProcessorSettings processorSettings, ResourceDetails? resourceDetails, ConfigurationUnitInternal unitInternal, bool isLimitMode = false) 34 : base(unitInternal, isLimitMode) 35 { 36 this.processorSettings = processorSettings; 37 this.resourceDetails = resourceDetails; 38 } 39 40 /// <inheritdoc /> 41 void IDiagnosticsSink.OnDiagnostics(DiagnosticLevel level, string message) 42 { 43 this.OnDiagnostics(level, message); 44 } 45 46 /// <inheritdoc /> 47 protected override ValueSet GetSettingsInternal() 48 { 49 return this.processorSettings.DSCv3.GetResourceSettings(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails)).Settings; 50 } 51 52 /// <inheritdoc /> 53 protected override bool TestSettingsInternal() 54 { 55 return this.processorSettings.DSCv3.TestResource(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails)).InDesiredState; 56 } 57 58 /// <inheritdoc /> 59 protected override bool ApplySettingsInternal() 60 { 61 return this.processorSettings.DSCv3.SetResourceSettings(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails)).RebootRequired; 62 } 63 64 /// <inheritdoc /> 65 protected override IList<ValueSet>? GetAllSettingsInternal() 66 { 67 var exportResult = this.processorSettings.DSCv3.ExportResource(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails)); 68 69 string expectedType = this.UnitInternal.QualifiedName.ToLowerInvariant(); 70 List<ValueSet> result = new List<ValueSet>(); 71 72 foreach (var exportItem in exportResult) 73 { 74 if (exportItem.Type.ToLowerInvariant() != expectedType) 75 { 76 throw new UnitPropertyUnsupportedException(typeof(IGetAllSettingsConfigurationUnitProcessor)); 77 } 78 79 result.Add(exportItem.Settings); 80 } 81 82 return result; 83 } 84 85 /// <inheritdoc /> 86 protected override IList<ConfigurationUnit>? GetAllUnitsInternal() 87 { 88 var exportResult = this.processorSettings.DSCv3.ExportResource(this.UnitInternal, ProcessorRunSettings.CreateFromResourceDetails(this.resourceDetails)); 89 90 List<ConfigurationUnit> result = new List<ConfigurationUnit>(); 91 92 foreach (var exportItem in exportResult) 93 { 94 ConfigurationUnit unit = new ConfigurationUnit(); 95 96 unit.Type = exportItem.Type; 97 unit.Identifier = exportItem.Name; 98 unit.Settings = exportItem.Settings; 99 unit.Metadata = exportItem.Metadata; 100 unit.Dependencies = exportItem.Dependencies; 101 102 result.Add(unit); 103 } 104 105 return result; 106 } 107 } 108 }