Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
 /// <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);
 }
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
 /// <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);
     }
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }