Beispiel #1
0
        public override async Task Execute(ContainerRepositoryPollingContext context)
        {
            var containerRepository = context.ContainerRepository;

            using (_log.BeginScope(new Dictionary <string, object>()
            {
                { "Repository", containerRepository }
            }))
            {
                try
                {
                    _log.LogTrace("Fetching tags for {imagerepository}", containerRepository);

                    var client = await _registryClientPool.GetRegistryClientForRepository(containerRepository);

                    var remoteContainerRepositoryTags = await client.GetRepositoryTags(containerRepository);

                    var localContainerRepositoryTags =
                        await _containerImageMetadataService.GetTagsForRepository(containerRepository);

                    // remove tags and container images that we already know about
                    var newOrUpdatedContainerRepositoryTagsQuery = remoteContainerRepositoryTags
                                                                   .Except(localContainerRepositoryTags);

                    // we don't need tags older than a month, so we'll truncate all the junk
                    newOrUpdatedContainerRepositoryTagsQuery = newOrUpdatedContainerRepositoryTagsQuery
                                                               .OrderByDescending(x => x.CreationDateTime)
                                                               .Where(x => x.CreationDateTime >= DateTimeOffset.Now.AddDays(-30))
                                                               .Take(20);

                    // ReSharper disable once PossibleMultipleEnumeration
                    var newOrUpdatedContainerRepositoryTags = newOrUpdatedContainerRepositoryTagsQuery.ToList();
                    if (newOrUpdatedContainerRepositoryTags.Any())
                    {
                        _log.LogInformation($"Adding '{newOrUpdatedContainerRepositoryTags.Count}' new image tags ...");
                        await _containerImageMetadataService.AddOrUpdate(newOrUpdatedContainerRepositoryTags);
                    }
                }
                catch (Exception e)
                {
                    _log.LogWarning(e, "An error occured when fetching the latest image tags from the registry.");
                }
            }
        }
Beispiel #2
0
        public async Task <ActionResult> AddContainerImageIntoLocalStore(ContainerImageDto dto)
        {
            var containerImage = new ContainerImage(dto.Repository, dto.Tag, dto.Hash, dto.CreationDateTime);

            await _containerImageMetadataService.AddOrUpdate(containerImage);

            var containerImages = await _containerImageMetadataService
                                  .GetTagsForRepository(containerImage.Repository);

            return(Ok(
                       containerImages
                       .Select(x => new ContainerImageDto()
            {
                Hash = x.Hash,
                Repository = x.Repository,
                Tag = x.Tag,
                CreationDateTime = x.CreationDateTime
            })
                       .ToList()
                       ));
        }