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>Initializes a new instance of the <see cref="ContainerInitializer"/> class.</summary> /// <param name="manager">The manager.</param> /// <param name="settings">The settings.</param> public ContainerInitializer( IDockerContainerManager manager, ContainerResourceSettings settings) { _manager = manager; _settings = settings; }
/// <summary> /// Initializes the resources /// </summary> public async virtual Task InitializeAsync() { ResourceOptions = new TOptions(); var builder = ContainerResourceBuilder.New(); ResourceOptions.Configure(builder); Settings = builder.Build(); SetComposeVariables(); OnSettingsBuilded(Settings); ValidateSettings(Settings); DockerConfiguration dockerConfig = Settings.DockerConfigResolver(); Manager = new DockerContainerManager(Settings, dockerConfig); Initializer = new ContainerInitializer(Manager, Settings); await Manager.CreateAndStartContainerAsync(); }