Exemple #1
0
 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);
 }
Exemple #2
0
        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));
 }
Exemple #4
0
        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);
        }