public static void AssertDscResourceEqual(DscResource expectedDscResource, DscResource actualDscResource) { Assert.Equal(expectedDscResource.ResourceStepName, actualDscResource.ResourceStepName); Assert.Equal(expectedDscResource.ResourceName, actualDscResource.ResourceName); Assert.Equal(expectedDscResource.Ensure, actualDscResource.Ensure); Assert.Equal(expectedDscResource.DependsOn, expectedDscResource.DependsOn); }
protected override bool ExecuteCore() { if (!File.Exists(FilePath)) { LogError("FilePath Does Not Exist", "DSC001", "Task failed because the configuration file at path '{0}' simply does not exist.", FilePath); return(false); } if (Configuration != null) { ITaskItem configuration = Configuration[0]; DesiredStateConfiguration xresource; using (XmlReader xmlReader = XmlReader.Create(configuration.ItemSpec, new XmlReaderSettings() { DtdProcessing = DtdProcessing.Ignore, XmlResolver = null })) xresource = (DesiredStateConfiguration)XamlServices.Load(xmlReader); } DscResource resource = Model.DscResource.FromJson(File.ReadAllText(FilePath)); CustomTaskItem resourceItem = new CustomTaskItem(); resourceItem.EvaluatedIncludeEscaped = "_DscResource"; resourceItem.SetMetadata("DscResourceName", resource.Name); resourceItem.SetMetadata("DscResourceFriendlyName", resource.FriendlyName); resourceItem.SetMetadata("DscResourceClassVersion", resource.ClassVersion.GetVersion()); DscResource = resourceItem; ArrayBuilder <ITaskItem2> builder = new ArrayBuilder <ITaskItem2>(); foreach (var property in resource.Properties) { CustomTaskItem propertyItem = new CustomTaskItem(); propertyItem.EvaluatedIncludeEscaped = "_DscResourceProperty"; propertyItem.SetMetadata("DscResourcePropertyName", property.Name); propertyItem.SetMetadata("DscResourcePropertyType", property.GetClrType()); propertyItem.SetMetadata("DscResourcePropertyAttribute", property.Attribute.ToString()); propertyItem.SetMetadata("DscResourcePropertyValues", property.GetPossibleValues()); builder.Add(propertyItem); } DscResourceProperties = builder; return(true); }
public static bool IsOverriddenByNaming(this DscResource resourceToBeOverridden, DscResource resourceToCompare) { return(resourceToBeOverridden.ResourceName.Equals(resourceToCompare.ResourceName) && resourceToBeOverridden.ResourceStepName.Equals(resourceToCompare.ResourceStepName)); }
private static CodeTypeDeclaration CreateTypeDeclaration(CommandType type, DscResource resource) { string verb = string.Empty; string verbClass = string.Empty; string outputType = string.Empty; switch (type) { case CommandType.GetTargetResource: { verbClass = "VerbsCommon"; verb = "Get"; outputType = "Hashtable"; break; } case CommandType.SetTargetResource: { verbClass = "VerbsCommon"; verb = "Set"; outputType = "void"; break; } case CommandType.TestTargetResource: { verbClass = "VerbsDiagnostic"; verb = "Test"; outputType = "bool"; break; } } CodeTypeDeclaration typeDeclaration = new CodeTypeDeclaration { Name = $"{verb}TargetResourceCommand", IsClass = true, IsPartial = true, TypeAttributes = System.Reflection.TypeAttributes.Public, }; typeDeclaration.BaseTypes.Add(new CodeTypeReference("PSCmdlet")); CodeAttributeDeclaration cmdletAttribute = new CodeAttributeDeclaration(); cmdletAttribute.Name = "Cmdlet"; cmdletAttribute.Arguments.Add( new CodeAttributeArgument(new CodeVariableReferenceExpression($"{verbClass}.{verb}"))); cmdletAttribute.Arguments.Add( new CodeAttributeArgument(new CodePrimitiveExpression("TargetResource"))); typeDeclaration.CustomAttributes.Add(cmdletAttribute); CodeAttributeDeclaration outputTypeAttribute = new CodeAttributeDeclaration(); outputTypeAttribute.Name = "OutputType"; outputTypeAttribute.Arguments.Add( new CodeAttributeArgument(new CodeVariableReferenceExpression($"typeof({outputType})"))); typeDeclaration.CustomAttributes.Add(outputTypeAttribute); foreach (var property in resource.Properties) { CodeMemberField memberProperty = new CodeMemberField(); memberProperty.Name = property.Name + " { get; set; }"; memberProperty.Type = new CodeTypeReference(DscResourceTypeConverter.ConvertToType(property.PropertyType)); CodeAttributeDeclaration parameterAttribute = new CodeAttributeDeclaration(); parameterAttribute.Name = "Parameter"; if (property.Attribute == DscResourceAttribute.Key || property.Attribute == DscResourceAttribute.Required) { parameterAttribute.Arguments.Add( new CodeAttributeArgument { Name = "Mandatory", Value = new CodePrimitiveExpression(true) }); } memberProperty.CustomAttributes.Add(parameterAttribute); if (property.PossibleValues?.Count > 0) { CodeAttributeDeclaration validateSetAttribute = new CodeAttributeDeclaration(); validateSetAttribute.Name = "ValidateSet"; foreach (var possibleValue in property.Values) { validateSetAttribute.Arguments.Add( new CodeAttributeArgument(new CodePrimitiveExpression(possibleValue))); } memberProperty.CustomAttributes.Add(validateSetAttribute); } typeDeclaration.Members.Add(memberProperty); } return(typeDeclaration); }