Example #1
0
        public async Task <ContainerImage> GetImage(string repository, string tag)
        {
            var repositories = await GetRepositoriesInternal();

            var repo = repositories.First(x => x.repositoryUri == repository);

            var describeImagesRequest = new DescribeImagesRequest()
            {
                ImageIds = new List <ImageIdentifier>()
                {
                    new ImageIdentifier()
                    {
                        ImageTag = tag
                    }
                },
                RegistryId     = repo.registryId,
                RepositoryName = repo.repositoryName,
            };

            var images = await _client.DescribeImagesAsync(describeImagesRequest, CancellationToken.None);

            return(images.ImageDetails.SelectMany(
                       i => i.ImageTags,
                       (i, tag) => new ContainerImage(repository, tag, i.ImageDigest, i.ImagePushedAt)
                       )
                   .First());
        }
Example #2
0
        public async Task <List <(string tag, DateTime createdAt)> > GetRepositoryTags(string repository)
        {
            using (_log.BeginScope(new Dictionary <string, object>()
            {
                { "Repository", repository }
            }))
            {
                _log.LogInformation("Getting repository tags");
                var repositories = await _client.DescribeRepositoriesAsync(new DescribeRepositoriesRequest());

                var repo = repositories.Repositories.First(r =>
                                                           r.RepositoryUri.Equals(repository, StringComparison.OrdinalIgnoreCase));

                var describeImagesRequest = new DescribeImagesRequest()
                {
                    RegistryId     = repo.RegistryId,
                    RepositoryName = repo.RepositoryName,
                };

                var images = await _client.DescribeImagesAsync(describeImagesRequest, CancellationToken.None);

                _log.LogTrace("Building image list");
                var imageList = images.ImageDetails.SelectMany(
                    i => i.ImageTags,
                    (i, tag) => (tag, i.ImagePushedAt)
                    )
                                .ToList();

                while (images.NextToken != null)
                {
                    describeImagesRequest.NextToken = images.NextToken;
                    images = await _client.DescribeImagesAsync(describeImagesRequest);

                    imageList.AddRange(
                        images.ImageDetails.SelectMany(
                            i => i.ImageTags,
                            (i, tag) => (tag, i.ImagePushedAt)
                            )
                        );
                }

                _log.LogInformation("Found {ImageCount} images for {Repository}", imageList.Count, repository);

                return(imageList);
            }
        }