Ejemplo n.º 1
0
        public override async Task <IDictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate> > RestoreModules(RootConfiguration configuration, IEnumerable <OciArtifactModuleReference> references)
        {
            var statuses = new Dictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate>();

            foreach (var reference in references)
            {
                using var timer           = new ExecutionTimer($"Restore module {reference.FullyQualifiedReference}");
                var(result, errorMessage) = await this.TryPullArtifactAsync(configuration, reference);

                if (result is null)
                {
                    if (errorMessage is not null)
                    {
                        statuses.Add(reference, x => x.ModuleRestoreFailedWithMessage(reference.FullyQualifiedReference, errorMessage));
                        timer.OnFail(errorMessage);
                    }
                    else
                    {
                        statuses.Add(reference, x => x.ModuleRestoreFailed(reference.FullyQualifiedReference));
                        timer.OnFail();
                    }
                }
            }

            return(statuses);
        }
Ejemplo n.º 2
0
        // base implementation for cache invalidation that should fit all external registries
        protected async Task <IDictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate> > InvalidateModulesCacheInternal(RootConfiguration configuration, IEnumerable <TModuleReference> references)
        {
            var statuses = new Dictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate>();

            foreach (var reference in references)
            {
                using var timer = new ExecutionTimer($"Delete module {reference.FullyQualifiedReference} from cache");
                try
                {
                    if (Directory.Exists(GetModuleDirectoryPath(reference)))
                    {
                        await this.TryDeleteModuleDirectoryAsync(reference);
                    }
                }
                catch (Exception exception)
                {
                    if (exception.Message is { } message)
                    {
                        statuses.Add(reference, x => x.ModuleDeleteFailedWithMessage(reference.FullyQualifiedReference, message));
                        timer.OnFail($"Unexpected exception {exception}: {message}");

                        return(statuses);
                    }

                    statuses.Add(reference, x => x.ModuleDeleteFailed(reference.FullyQualifiedReference));
                    timer.OnFail($"Unexpected exception {exception}.");
                }
            }

            return(statuses);
        }
Ejemplo n.º 3
0
        public override async Task <IDictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate> > RestoreModules(RootConfiguration configuration, IEnumerable <TemplateSpecModuleReference> references)
        {
            var statuses = new Dictionary <ModuleReference, DiagnosticBuilder.ErrorBuilderDelegate>();

            foreach (var reference in references)
            {
                using var timer = new ExecutionTimer($"Restore module {reference.FullyQualifiedReference}");
                try
                {
                    var repository         = this.repositoryFactory.CreateRepository(configuration, reference.SubscriptionId);
                    var templateSpecEntity = await repository.FindTemplateSpecByIdAsync(reference.TemplateSpecResourceId);

                    await this.SaveModuleToDisk(reference, templateSpecEntity);
                }
                catch (TemplateSpecException templateSpecException)
                {
                    statuses.Add(reference, x => x.ModuleRestoreFailedWithMessage(reference.FullyQualifiedReference, templateSpecException.Message));
                    timer.OnFail(templateSpecException.Message);
                }
                catch (Exception exception)
                {
                    if (exception.Message is { } message)
                    {
                        statuses.Add(reference, x => x.ModuleRestoreFailedWithMessage(reference.FullyQualifiedReference, message));
                        timer.OnFail($"Unexpected exception {exception}: {message}");

                        return(statuses);
                    }

                    statuses.Add(reference, x => x.ModuleRestoreFailed(reference.FullyQualifiedReference));
                    timer.OnFail($"Unexpected exception {exception}.");
                }
            }

            return(statuses);
        }