|
15 | 15 | using Docker.DotNet.Models;
|
16 | 16 | using Microsoft.Extensions.DependencyInjection;
|
17 | 17 | using Synapse.Runtime.Services;
|
| 18 | +using static Synapse.SynapseDefaults.Resources; |
| 19 | +using System.Net; |
18 | 20 |
|
19 | 21 | namespace Synapse.Runtime.Docker.Services;
|
20 | 22 |
|
@@ -76,8 +78,20 @@ public override async Task<IWorkflowProcess> CreateProcessAsync(Workflow workflo
|
76 | 78 | try
|
77 | 79 | {
|
78 | 80 | this.Logger.LogDebug("Creating a new Docker container for workflow instance '{workflowInstance}'...", workflowInstance.GetQualifiedName());
|
79 |
| - if (this.Docker == null) await this.InitializeAsync(cancellationToken).ConfigureAwait(false); |
| 81 | + if (this.Docker == null) await this.InitializeAsync(cancellationToken).ConfigureAwait(false); |
80 | 82 | var container = this.Runner.Runtime.Docker!.ContainerTemplate.Clone()!;
|
| 83 | + try |
| 84 | + { |
| 85 | + await this.Docker!.Images.InspectImageAsync(container.Image, cancellationToken).ConfigureAwait(false); |
| 86 | + } |
| 87 | + catch (DockerApiException ex) when (ex.StatusCode == HttpStatusCode.NotFound) |
| 88 | + { |
| 89 | + var downloadProgress = new Progress<JSONMessage>(); |
| 90 | + var imageComponents = container.Image.Split(':'); |
| 91 | + var imageName = imageComponents[0]; |
| 92 | + var imageTag = imageComponents.Length > 1 ? imageComponents[1] : null; |
| 93 | + await this.Docker!.Images.CreateImageAsync(new() { FromImage = imageName, Tag = imageTag }, new(), downloadProgress, cancellationToken).ConfigureAwait(false); |
| 94 | + } |
81 | 95 | container.SetEnvironmentVariable(SynapseDefaults.EnvironmentVariables.Runner.Namespace, workflowInstance.GetNamespace()!);
|
82 | 96 | container.SetEnvironmentVariable(SynapseDefaults.EnvironmentVariables.Runner.Name, $"{workflowInstance.GetName()}-{Guid.NewGuid().ToString("N")[..12].ToLowerInvariant()}");
|
83 | 97 | container.SetEnvironmentVariable(SynapseDefaults.EnvironmentVariables.Api.Uri, this.Runner.Api.Uri.OriginalString);
|
|
0 commit comments