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")); }
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")); }
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]); }
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")); }
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]); }
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]); }
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]); }
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]); }
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]); }
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]); }
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")); }
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]); }
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); }
public void TestGetModuleNameForDscResourceXadDomain() { string moduleName = ConfigurationParsingHelper.GetModuleNameForDscResource("MSFT_xADDomain"); Assert.Equal("xActiveDirectory", moduleName); }
public void TestGetModuleNameForDscResourceXComputer() { string moduleName = ConfigurationParsingHelper.GetModuleNameForDscResource("MSFT_xComputer"); Assert.Equal("xComputerManagement", moduleName); }