internal async static Task DeployAsync( this IDockerContainerManager manager, ContainerResourceSettings settings, Stream source, string databaseConnection, string databaseName) { using (var dacPackage = Microsoft.SqlServer.Dac.DacPackage.Load(source)) { var deployService = new DacServices(databaseConnection); var deployScriptRaw = deployService.GenerateDeployScript(dacPackage, databaseName, DacpacOptions.Deploy); var deployScript = new DeployScript(deployScriptRaw); deployScript.SetVariable("DefaultDataPath", "/tmp/"); deployScript.SetVariable("DefaultLogPath", "/tmp/"); var sqlScript = deployScript.Generate(); FileInfo scriptFile = CreateSqlFile(sqlScript); var copyContext = new CopyContext(scriptFile.FullName, $"/tmp/{scriptFile.Name}"); await manager.CopyToContainer(copyContext); await manager.InvokeCommandAsync(SqlCommand.ExecuteFile(copyContext.Destination, settings)); File.Delete(scriptFile.FullName); } }
/// <summary> /// Executes a copy command described by the <see cref="CopyContext"/> /// </summary> /// <param name="context"></param> /// <param name="settings"></param> public static async Task CopyTo( CopyContext context, IImageSettings settings) { await DockerManager.CopyToContainer( context, settings); }
public static async Task CopyToContainer(CopyContext context, IImageSettings settings) { using (var archiver = new TarArchiver(context.Source)) { await _client.Containers.ExtractArchiveToContainerAsync( settings.ContainerId, new ContainerPathStatParameters { AllowOverwriteDirWithFile = true, Path = context.DestinationFolder.Replace("\\", "/") }, archiver.Stream); } }
/// <inheritdoc/> public async Task CopyToContainerAsync(CopyContext context, bool overrideTargetName = false) { using (var archiver = new TarArchiver(context, overrideTargetName)) { await _client.Containers.ExtractArchiveToContainerAsync( Instance.Id, new ContainerPathStatParameters { AllowOverwriteDirWithFile = true, Path = context.DestinationFolder.Replace("\\", "/") }, archiver.Stream); } }
internal static async Task DeployAndExecute( string sqlScript, IImageSettings settings) { FileInfo scriptFile = CreateSqlFile(sqlScript); CopyContext copyContext = new CopyContext(scriptFile.FullName, $"/tmp/{scriptFile.Name}"); await Container.CopyTo( copyContext, settings); await Container.InvokeCommand( SqlCommand.ExecuteFile(copyContext.Destination, settings), settings); File.Delete(scriptFile.FullName); }
internal static async Task DeployAndImport( CreateCollectionFromFileOptions options, IImageSettings settings) { var copyContext = new CopyContext( options.File.FullName, Path.Combine(options.Destination, options.File.Name)); await Container.CopyTo(copyContext, settings); await Container.InvokeCommand( new MongoImportCommand( copyContext.Destination, options.CollectionOptions.DatabaseOptions.DatabaseName, options.CollectionOptions.CollectionName, options.CustomImportArgs), settings); }
public TarArchiver(CopyContext CopyContext, bool overrideTargetName) { _archiveFileName = Path.GetTempFileName(); using (Stream fileStream = File.Create(_archiveFileName)) using (Stream tarStream = new TarOutputStream(fileStream)) using (TarArchive tarArchive = TarArchive.CreateOutputTarArchive(tarStream)) { TarEntry tarEntry = TarEntry.CreateEntryFromFile(CopyContext.Source); tarEntry.Name = overrideTargetName ? CopyContext.Destination.Split('\\', '/').Last() : CopyContext.Source.Split('\\', '/').Last(); tarArchive.WriteEntry(tarEntry, true); } Stream = File.OpenRead(_archiveFileName); }