Ejemplo n.º 1
0
        public void TestExtractConfigurationNames3()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(VisualStudioPath);

            Assert.Equal(0, results.Errors.Count());
            Assert.Equal(1, results.RequiredModules.Count);
            Assert.Equal(true, results.RequiredModules.ContainsKey("xPSDesiredStateConfiguration"));
        }
Ejemplo n.º 2
0
        public void TestModuleImportSingleOutsideNode()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(ModuleImportSingleOutsideNodeConfigurationPath);

            Assert.Equal(0, results.Errors.Count());
            Assert.Equal(1, results.RequiredModules.Count);
            Assert.Equal(true, results.RequiredModules.ContainsKey("xNetworking"));
        }
Ejemplo n.º 3
0
        public void TestIEEScBad()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(IEEScBadConfigurationPath);

            Assert.AreEqual(0, results.Errors.Count());
            Assert.AreEqual(1, results.RequiredModules.Count);
            Assert.AreEqual("xSystemSecurity", results.RequiredModules[0]);
        }
Ejemplo n.º 4
0
        public void TestIeeScBad()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(IeeScBadConfigurationPath);

            Assert.Equal(0, results.Errors.Count());
            Assert.Equal(1, results.RequiredModules.Count);
            Assert.Equal(true, results.RequiredModules.ContainsKey("xSystemSecurity"));
        }
Ejemplo n.º 5
0
        public void TestModuleImportSingleInsideNode()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(ModuleImportSingleInsideNodeConfigurationPath);

            Assert.AreEqual(0, results.Errors.Count());
            Assert.AreEqual(1, results.RequiredModules.Count);
            Assert.AreEqual("xNetworking", results.RequiredModules[0]);
        }
Ejemplo n.º 6
0
        public void TestNameImportSingleOutsideNode()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(NameImportSingleOutsideNodeConfigurationPath);

            Assert.AreEqual(0, results.Errors.Count());
            Assert.AreEqual(1, results.RequiredModules.Count);
            Assert.AreEqual("xComputerManagement", results.RequiredModules[0]);
        }
Ejemplo n.º 7
0
        public void TestExtractConfigurationNames1()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(CorporateClientConfigurationPath);

            Assert.Equal(0, results.Errors.Count());
            Assert.Equal(1, results.RequiredModules.Count);
            Assert.Equal(true, results.RequiredModules.ContainsKey("xComputerManagement"));
        }
        public void TestExtractConfigurationNames3()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(VisualStudioPath);

            Assert.AreEqual(0, results.Errors.Count(), "Parsing errors");
            Assert.AreEqual(1, results.RequiredModules.Count);
            Assert.AreEqual("xPSDesiredStateConfiguration", results.RequiredModules[0]);
        }
Ejemplo n.º 9
0
        public void TestNameModuleImportSingleInsideNode()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(NameModuleImportSingleInsideNodeConfigurationPath);

            Assert.Equal(0, results.Errors.Count());
            Assert.Equal(1, results.RequiredModules.Count);
            Assert.Equal(true, results.RequiredModules.ContainsKey("xComputerManagement"));
        }
        public void TestExtractConfigurationNames1()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(CorporateClientConfigurationPath);

            Assert.AreEqual(0, results.Errors.Count(), "Parsing errors");
            Assert.AreEqual(1, results.RequiredModules.Count);
            Assert.AreEqual("xComputerManagement", results.RequiredModules[0]);
        }
        public void TestExtractConfigurationNames2()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(DomainControllerConfigurationPath);

            Assert.AreEqual(0, results.Errors.Count(), "Parsing errors");
            Assert.AreEqual(2, results.RequiredModules.Count);
            Assert.AreEqual("xComputerManagement", results.RequiredModules[0]);
            Assert.AreEqual("xActiveDirectory", results.RequiredModules[1]);
        }
Ejemplo n.º 12
0
        public void TestModuleImportListOutsideNode()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(ModuleImportListOutsideNodeConfigurationPath);

            Assert.AreEqual(0, results.Errors.Count());
            Assert.AreEqual(2, results.RequiredModules.Count);
            Assert.AreEqual("xPSDesiredStateConfiguration", results.RequiredModules[0]);
            Assert.AreEqual("xNetworking", results.RequiredModules[1]);
        }
Ejemplo n.º 13
0
        public void TestNameImportListInsideNode()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(NameImportListInsideNodeConfigurationPath);

            Assert.AreEqual(0, results.Errors.Count());
            Assert.AreEqual(2, results.RequiredModules.Count);
            Assert.AreEqual("xComputerManagement", results.RequiredModules[0]);
            Assert.AreEqual("xActiveDirectory", results.RequiredModules[1]);
        }
Ejemplo n.º 14
0
        public void TestExtractConfigurationNames2()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(DomainControllerConfigurationPath);

            Assert.Equal(0, results.Errors.Count());
            Assert.Equal(2, results.RequiredModules.Count);
            Assert.Equal(true, results.RequiredModules.ContainsKey("xComputerManagement"));
            Assert.Equal(true, results.RequiredModules.ContainsKey("xActiveDirectory"));
        }
Ejemplo n.º 15
0
        public void TestExtractConfigurationNamesMulti()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(SHMulptiConfigurationsPath);

            Assert.AreEqual(0, results.Errors.Count());
            Assert.AreEqual(3, results.RequiredModules.Count);
            Assert.AreEqual("xComputerManagement", results.RequiredModules[0]);
            Assert.AreEqual("xNetworking", results.RequiredModules[1]);
            Assert.AreEqual("xPSDesiredStateConfiguration", results.RequiredModules[2]);
        }
Ejemplo n.º 16
0
        public void TestExtractConfigurationNamesMulti()
        {
            ConfigurationParseResult results = ConfigurationParsingHelper.ParseConfiguration(ShMulptiConfigurationsPath);

            Assert.Equal(0, results.Errors.Count());
            Assert.Equal(3, results.RequiredModules.Count);
            Assert.Equal(true, results.RequiredModules.ContainsKey("xComputerManagement"));
            Assert.Equal(true, results.RequiredModules.ContainsKey("xNetworking"));
            Assert.Equal(true, results.RequiredModules.ContainsKey("xPSDesiredStateConfiguration"));
        }
        private string CreateConfigurationArchive()
        {
            WriteVerbose(String.Format(CultureInfo.CurrentUICulture, Resources.AzureVMDscParsingConfiguration, this.ConfigurationPath));
            ConfigurationParseResult parseResult = null;

            try
            {
                parseResult = ConfigurationParsingHelper.ParseConfiguration(this.ConfigurationPath);
            }
            catch (GetDscResourceException e)
            {
                ThrowTerminatingError(new ErrorRecord(e, "CannotAccessDscResource", ErrorCategory.PermissionDenied, null));
            }
            if (parseResult.Errors.Any())
            {
                ThrowTerminatingError(
                    new ErrorRecord(
                        new ParseException(
                            String.Format(
                                CultureInfo.CurrentUICulture,
                                Resources.PublishVMDscExtensionStorageParserErrors,
                                this.ConfigurationPath,
                                String.Join("\n", parseResult.Errors.Select(error => error.ToString())))),
                        "DscConfigurationParseError",
                        ErrorCategory.ParserError,
                        null));
            }
            List <string> requiredModules = parseResult.RequiredModules;

            WriteVerbose(String.Format(CultureInfo.CurrentUICulture, Resources.PublishVMDscExtensionRequiredModulesVerbose, String.Join(", ", requiredModules)));

            // Create a temporary directory for uploaded zip file
            string tempZipFolder = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

            WriteVerbose(String.Format(CultureInfo.CurrentUICulture, Resources.PublishVMDscExtensionTempFolderVerbose, tempZipFolder));
            Directory.CreateDirectory(tempZipFolder);
            this._temporaryDirectoriesToDelete.Add(tempZipFolder);

            // CopyConfiguration
            string configurationName        = Path.GetFileName(this.ConfigurationPath);
            string configurationDestination = Path.Combine(tempZipFolder, configurationName);

            WriteVerbose(String.Format(
                             CultureInfo.CurrentUICulture,
                             Resources.PublishVMDscExtensionCopyFileVerbose,
                             this.ConfigurationPath,
                             configurationDestination));
            File.Copy(this.ConfigurationPath, configurationDestination);

            // CopyRequiredModules
            foreach (var module in requiredModules)
            {
                using (System.Management.Automation.PowerShell powershell = System.Management.Automation.PowerShell.Create())
                {
                    // Wrapping script in a function to prevent script injection via $module variable.
                    powershell.AddScript(
                        @"function Copy-Module([string]$module, [string]$tempZipFolder) 
                        {
                            $mi = Get-Module -List -Name $module;
                            $moduleFolder = Split-Path -Parent $mi.Path;
                            Copy-Item -Recurse -Path $moduleFolder -Destination $tempZipFolder;
                        }"
                        );
                    powershell.Invoke();
                    powershell.Commands.Clear();
                    powershell.AddCommand("Copy-Module")
                    .AddParameter("module", module)
                    .AddParameter("tempZipFolder", tempZipFolder);
                    WriteVerbose(String.Format(
                                     CultureInfo.CurrentUICulture,
                                     Resources.PublishVMDscExtensionCopyModuleVerbose,
                                     module,
                                     tempZipFolder));
                    powershell.Invoke();
                }
            }

            //
            // Zip the directory
            //
            string archive;

            if (this.ParameterSetName == CreateArchiveParameterSetName)
            {
                archive = this.ConfigurationArchivePath;

                if (!this.Force && System.IO.File.Exists(archive))
                {
                    this.ThrowTerminatingError(
                        new ErrorRecord(
                            new UnauthorizedAccessException(string.Format(CultureInfo.CurrentUICulture, Resources.AzureVMDscArchiveAlreadyExists, archive)),
                            "FileAlreadyExists",
                            ErrorCategory.PermissionDenied,
                            null));
                }
            }
            else
            {
                archive = Path.Combine(Path.GetTempPath(), configurationName + ZipFileExtension);
                this._temporaryFilesToDelete.Add(archive);
            }

            if (File.Exists(archive))
            {
                File.Delete(archive);
            }

            System.IO.Compression.ZipFile.CreateFromDirectory(tempZipFolder, archive);
            return(archive);
        }
        private string CreateConfigurationArchive()
        {
            WriteVerbose(String.Format(CultureInfo.CurrentUICulture, Resources.AzureVMDscParsingConfiguration, this.ConfigurationPath));
            ConfigurationParseResult parseResult = ConfigurationParsingHelper.ExtractConfigurationNames(this.ConfigurationPath);

            if (parseResult.Errors.Any())
            {
                ThrowTerminatingError(
                    new ErrorRecord(
                        new ParseException(
                            String.Format(
                                CultureInfo.CurrentUICulture,
                                Resources.PublishVMDscExtensionStorageParserErrors,
                                this.ConfigurationPath,
                                String.Join("\n", parseResult.Errors.Select(error => error.ToString())))),
                        string.Empty,
                        ErrorCategory.ParserError,
                        null));
            }
            List <string> requiredModules = parseResult.RequiredModules;

            WriteVerbose(String.Format(CultureInfo.CurrentUICulture, Resources.PublishVMDscExtensionRequiredModulesVerbose, String.Join(", ", requiredModules)));

            // Create a temporary directory for uploaded zip file
            string tempZipFolder = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

            WriteVerbose(String.Format(CultureInfo.CurrentUICulture, Resources.PublishVMDscExtensionTempFolderVerbose, tempZipFolder));
            Directory.CreateDirectory(tempZipFolder);
            this._temporaryDirectoriesToDelete.Add(tempZipFolder);

            // CopyConfiguration
            string configurationName        = Path.GetFileName(this.ConfigurationPath);
            string configurationDestination = Path.Combine(tempZipFolder, configurationName);

            WriteVerbose(String.Format(
                             CultureInfo.CurrentUICulture,
                             Resources.PublishVMDscExtensionCopyFileVerbose,
                             this.ConfigurationPath,
                             configurationDestination));
            File.Copy(this.ConfigurationPath, configurationDestination);

            // CopyRequiredModules
            foreach (var module in requiredModules)
            {
                using (PowerShell powershell = PowerShell.Create())
                {
                    // Wrapping script in a function to prevent script injection via $module variable.
                    powershell.AddScript(
                        @"function Copy-Module([string]$module, [string]$tempZipFolder) 
                        {
                            $mi = Get-Module -List -Name $module;
                            $moduleFolder = Split-Path -Parent $mi.Path;
                            Copy-Item -Recurse -Path $moduleFolder -Destination $tempZipFolder;
                        }"
                        );
                    powershell.Invoke();
                    powershell.Commands.Clear();
                    powershell.AddCommand("Copy-Module")
                    .AddParameter("module", module)
                    .AddParameter("tempZipFolder", tempZipFolder);
                    WriteVerbose(String.Format(
                                     CultureInfo.CurrentUICulture,
                                     Resources.PublishVMDscExtensionCopyModuleVerbose,
                                     module,
                                     tempZipFolder));
                    powershell.Invoke();
                }
            }

            //
            // Zip the directory
            //
            string archive;

            if (this.ParameterSetName == CreateArchiveParameterSetName)
            {
                archive = this.ConfigurationArchivePath;

                if (!this.Force && System.IO.File.Exists(archive))
                {
                    this.ThrowTerminatingError(
                        new ErrorRecord(
                            new UnauthorizedAccessException(string.Format(CultureInfo.CurrentUICulture, Resources.AzureVMDscArchiveAlreadyExists, archive)),
                            string.Empty,
                            ErrorCategory.PermissionDenied,
                            null));
                }
            }
            else
            {
                archive = Path.Combine(Path.GetTempPath(), configurationName + ZipFileExtension);

                if (File.Exists(archive))
                {
                    File.Delete(archive);
                }

                this._temporaryFilesToDelete.Add(archive);
            }

            // azure-sdk-tools uses .net framework 4.0
            // System.IO.Compression.ZipFile was added in .net 4.5
            // Since support for DSC require powershell 4.0+, which require .net 4.5+
            // we assume that created powershell session will have access to System.IO.Compression.FileSystem assembly
            // from version 4.5. We load it to create a zip archive from a directory.
            using (var powershell = System.Management.Automation.PowerShell.Create())
            {
                var script =
                    @"Add-Type -AssemblyName System.IO.Compression.FileSystem > $null;" +
                    @"[void] [System.IO.Compression.ZipFile]::CreateFromDirectory('" + tempZipFolder + "', '" + archive + "');";

                powershell.AddScript(script);
                WriteVerbose(String.Format(
                                 CultureInfo.CurrentUICulture,
                                 Resources.PublishVMDscExtensionCreateZipVerbose,
                                 archive,
                                 tempZipFolder));
                powershell.Invoke();
            }

            return(archive);
        }
Ejemplo n.º 19
0
        public void TestGetModuleNameForDscResourceXadDomain()
        {
            string moduleName = ConfigurationParsingHelper.GetModuleNameForDscResource("MSFT_xADDomain");

            Assert.Equal("xActiveDirectory", moduleName);
        }
Ejemplo n.º 20
0
        public void TestGetModuleNameForDscResourceXComputer()
        {
            string moduleName = ConfigurationParsingHelper.GetModuleNameForDscResource("MSFT_xComputer");

            Assert.Equal("xComputerManagement", moduleName);
        }