public static async Task ProcessImages(DirectoryInfo logDir) { var imageSet = await Anchore.GetAggregatedImages(); foreach (var tagKey in imageSet.Keys.OrderBy(s => s)) { var images = imageSet[tagKey]; for (int i = 0; i < images.Count; i++) { var image = images[i]; var vulnerabilities = await Anchore.GetVulnerabilitiesForImage(image); var result = VulnerabilityStore.Save(logDir, image, null, vulnerabilities); WriteLine($"{image.Tag}; {image.Digest}; New: {result}"); if (i + 1 >= images.Count) { continue; } for (int j = i + 1; j < images.Count; j++) { var image2 = images[j]; var vulnerabilities2 = await Anchore.GetVulnerabilitiesForImage(image); var result2 = VulnerabilityStore.Save(logDir, image2, image, vulnerabilities2); } } } }
public static async Task DiffVulnerabilities(DirectoryInfo logDir, string tag) { var imageDictionary = await Anchore.GetAggregatedImages(); var selectedTags = new List <string>(); foreach (var tagKey in imageDictionary.Keys) { if (tagKey.EndsWith(tag)) { selectedTags.Clear(); selectedTags.Add(tagKey); break; } else if (tagKey.Contains(tag)) { selectedTags.Add(tagKey); } } foreach (var selectedTag in selectedTags) { var images = imageDictionary[selectedTag]; if (images == null) { WriteLine($"No image found for {tag}."); } else if (images.Count == 1) { WriteLine($"Only 1 image found for {selectedTag}."); } else { WriteLine($"Diff {images.Count} images for {selectedTag}."); for (int i = 0; i < images.Count - 1; i++) { await DiffVulnerabilitiesForTwoImages(logDir, images[i], images[i + 1]); WriteLine(); } } } }