private async Task HandleRequestByContainerRegistryAsync()

in src/Azure.Deployments.Extensibility.Providers.ThirdParty/ThirdPartyExtensibilityProvider.cs [64:107]


    private async Task<ExtensibilityOperationResponse> HandleRequestByContainerRegistryAsync(
        string operation,
        ExtensibilityOperationRequest request,
        CancellationToken cancellation)
    {
        var providerName = request.Import.Provider;
        var tag = request.Import.Version;
        var containerGroupName = GenerateContainerGroupName(providerName, tag);

        var providerContainerRegistry = await TryGetExtensibilityProviderContainerRegistry(providerName, tag, cancellation);

        if (providerContainerRegistry is null)
        {
            return new ExtensibilityOperationErrorResponse(
                new ExtensibilityError(
                    "UnknownExtensibilityProvider",
                    JsonPointer.Parse("/imports"),
                    @$"Unknown extensibility provider ""{providerName}"" with version ""{tag}""."));
        }

        try
        {
            var externalPort = providerContainerRegistry.ExternalPort;
            var image = $"{providerContainerRegistry.ContainerRegistry}:{tag}";
            var baseUri = await containerManager.Create(containerGroupName, image, externalPort, cancellation);
            var operationUri = new Uri(baseUri, operation);

            return await CallExtensibilityProviderAsync(operationUri, request, cancellation);
        }
        catch (Exception ex)
        {
            // TODO: Handle container provisioning failures
            return new ExtensibilityOperationErrorResponse(
                    new ExtensibilityError(
                        "ExtensibilityProviderRequestError",
                        JsonPointer.Parse(string.Empty),
                        ex.Message));
        }
        finally
        {
            // TODO: Tear down container
            // await containerManager.Delete(containerGroupName, cancellation);
        }
    }