public async Task <TemporaryContainerResponse <TemporaryStorageContainer> > GetStorageContainerAsync(Server server) { var existingContainer = _temporaryContainerManager.GetContainer <TemporaryStorageContainer>(server.Id, true); if (existingContainer != null) { return(new TemporaryContainerResponse <TemporaryStorageContainer>(existingContainer)); } var parameterBuilder = CreateContainerParametersBuilder.CreateStorageServer(server); var createResponse = await _clientManager.CreateContainerAsync(parameterBuilder); if (!createResponse.Success) { return(new TemporaryContainerResponse <TemporaryStorageContainer>(createResponse)); } var startResponse = await _clientManager.StartContainerAsync(createResponse.ContainerId); if (!startResponse.Success) { return(new TemporaryContainerResponse <TemporaryStorageContainer>(startResponse)); } var httpClient = CoreHttpClient.Create(_logger, $"http://{parameterBuilder.CreateParameters().Name}"); var container = new TemporaryStorageContainer(httpClient, server.Id, createResponse.ContainerId); _temporaryContainerManager.AddContainer(container); await DockerRetryHelper.WaitForStorageContainerAsync(container, _logger); return(new TemporaryContainerResponse <TemporaryStorageContainer>(container)); }
public async Task <DockerOperationResponse> CreateContainerAsync(Container container) { var builder = CreateContainerParametersBuilder.CreateFromContainer(container); var response = await _clientManager.CreateContainerAsync(builder); if (response.Success) { container.DockerId = response.ContainerId; } return(new DockerOperationResponse( response.Success, response.Errors, response.Warnings )); }
public async Task <ContainerIdResponse> CreateContainerAsync(CreateContainerParametersBuilder builder) { using var loggerScope = _logger.BeginScope("Creating new container"); var response = new ContainerIdResponse(_logger); builder.LogParameters(_logger); try { using var dockerClient = CreateDockerClient(); await PrepareImageAsync(builder.ImageId, dockerClient); var dockerResponse = await dockerClient.Containers.CreateContainerAsync(builder.CreateParameters()); if (dockerResponse.Warnings.Any()) { using (_logger.BeginScope("Container warnings were generated")) { foreach (var warning in dockerResponse.Warnings) { response.LogWarning($"Docker warning: {warning}"); } } } if (string.IsNullOrWhiteSpace(dockerResponse.ID)) { throw new Exception("No container ID received from created container."); } response.WithContainerId(dockerResponse.ID); } catch (Exception exception) { response.LogException(exception, "Unable to create new container"); response.HasFailed(); } return(response); }