예제 #1
0
        /// <summary>
        /// Copy a file from a remote vm.
        /// </summary>
        private CopyFileResult CopyFile(CopyFileConfig copyFileConfig)
        {
            // resolve host/guest variables
            copyFileConfig.DestinationPath = _installInstance.VirtualMachine.Rewrite(copyFileConfig.DestinationPath);
            copyFileConfig.File            = _installInstance.VirtualMachine.Rewrite(copyFileConfig.File);
            copyFileConfig.Name            = _installInstance.VirtualMachine.Rewrite(copyFileConfig.Name);
            // include in results
            CopyFileResult copyFileResult = new CopyFileResult();

            copyFileResult.File             = copyFileConfig.File;
            copyFileResult.Name             = copyFileConfig.Name;
            copyFileResult.IncludeInResults = copyFileConfig.IncludeInResults;
            copyFileResult.Success          = true;
            try
            {
                switch (copyFileConfig.Destination)
                {
                case CopyDestination.toTestClient:
                    CopyToTestClient(copyFileConfig, copyFileResult);
                    break;

                case CopyDestination.toVirtualMachine:
                    CopyToVirtualMachine(copyFileConfig);
                    break;
                }
            }
            catch (Exception ex)
            {
                copyFileResult.Success   = false;
                copyFileResult.LastError = ex.Message;
                ConsoleOutput.WriteLine(ex);
            }

            return(copyFileResult);
        }
예제 #2
0
        private void CopyToTestClient(CopyFileConfig copyFileConfig, CopyFileResult copyFileResult)
        {
            string destinationPath     = Path.Combine(_installInstance.LogPath, copyFileConfig.DestinationPath);
            string destinationFileName = Path.Combine(destinationPath, Path.GetFileName(copyFileConfig.Name));

            bool createDirectory = false;
            bool copyFile        = false;

            if (!_installInstance.SimulationOnly)
            {
                if (!copyFileConfig.CheckIfExists || (_installInstance.VirtualMachine.FileExistsInGuest(copyFileConfig.File) ||
                                                      _installInstance.VirtualMachine.DirectoryExistsInGuest(copyFileConfig.File)))
                {
                    if (!Directory.Exists(destinationPath))
                    {
                        createDirectory = true;
                    }

                    copyFile = true;
                }
            }
            else
            {
                copyFile        = true;
                createDirectory = true;
            }

            if (createDirectory)
            {
                ConsoleOutput.WriteLine("Creating 'Local:{0}'", destinationPath);
                Directory.CreateDirectory(destinationPath);
            }

            if (copyFile)
            {
                ConsoleOutput.WriteLine("Copying 'Remote:{0}' to 'Local:{1}'", copyFileConfig.File, destinationFileName);
                _installInstance.VirtualMachine.CopyFileFromGuestToHost(copyFileConfig.File, destinationFileName, copyFileConfig.Exclude);
                // local destination only exists when file was successfuly copied
                string destinationShortFileName = Path.Combine(_installInstance.ShortLogPath, copyFileConfig.DestinationPath);
                destinationShortFileName    = Path.Combine(destinationShortFileName, Path.GetFileName(copyFileConfig.Name));
                copyFileResult.DestFilename = destinationShortFileName;

                if (!_installInstance.SimulationOnly && File.Exists(destinationFileName))
                {
                    ConsoleOutput.WriteLine("Processing 'Local:{0}'", destinationFileName);
                    string transformedData = File.ReadAllText(destinationFileName);
                    if (!string.IsNullOrEmpty(copyFileConfig.XslTransform))
                    {
                        // transform data
                        XmlDocument xmlDocument = new XmlDocument();
                        xmlDocument.LoadXml(transformedData);
                        XPathDocument        xmlPathDocument = new XPathDocument(new XmlNodeReader(xmlDocument));
                        XslCompiledTransform xslTransform    = new XslCompiledTransform();
                        xslTransform.Load(XmlReader.Create(new StreamReader(copyFileConfig.XslTransform)));
                        StringWriter writer = new StringWriter();
                        xslTransform.Transform(xmlPathDocument, null, writer);
                        writer.Close();
                        transformedData = writer.ToString();
                        File.WriteAllText(destinationFileName, transformedData);
                    }

                    // include contents in results, as is
                    if (copyFileConfig.IncludeDataInResults)
                    {
                        copyFileResult.Data = transformedData;
                    }
                }
            }
        }