From 9fa77304a4e02c2fc5dd294ed0ade54953f167e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6berl?= Date: Fri, 11 Mar 2022 14:35:02 +0100 Subject: [PATCH] fix: issue with image cleanup The API for Target has to be changed: the cleanup needs the image name (not the id). --- internal/kubernetes/kubernetes.go | 14 ++++++++++---- internal/target/dtrack_target.go | 8 ++++---- internal/target/git_target.go | 6 +++--- internal/target/target.go | 2 +- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/internal/kubernetes/kubernetes.go b/internal/kubernetes/kubernetes.go index f92345d3..5175c35a 100644 --- a/internal/kubernetes/kubernetes.go +++ b/internal/kubernetes/kubernetes.go @@ -82,9 +82,9 @@ func (client *KubeClient) listPods(namespace, labelSelector string) []corev1.Pod return list.Items } -func (client *KubeClient) LoadImageInfos(namespaces []corev1.Namespace, podLabelSelector string) (map[string]ContainerImage, []string) { +func (client *KubeClient) LoadImageInfos(namespaces []corev1.Namespace, podLabelSelector string) (map[string]ContainerImage, []ContainerImage) { images := map[string]ContainerImage{} - allImages := []string{} + allImages := []ContainerImage{} for _, ns := range namespaces { pods := client.listPods(ns.Name, podLabelSelector) @@ -119,11 +119,17 @@ func (client *KubeClient) LoadImageInfos(namespaces []corev1.Namespace, podLabel img.Pods = append(img.Pods, pod) images[c.ImageID] = img + allImages = append(allImages, img) } else { logrus.Debugf("Skip image %s", c.ImageID) + allImages = append(allImages, ContainerImage{ + Image: c.Image, + ImageID: c.ImageID, + Auth: pullSecrets, + LegacyAuth: legacy, + Pods: []corev1.Pod{}, + }) } - - allImages = append(allImages, c.ImageID) } } } diff --git a/internal/target/dtrack_target.go b/internal/target/dtrack_target.go index 2a6ca262..6d30d822 100644 --- a/internal/target/dtrack_target.go +++ b/internal/target/dtrack_target.go @@ -103,7 +103,7 @@ func (g *DependencyTrackTarget) ProcessSbom(image kubernetes.ContainerImage, sbo return nil } -func (g *DependencyTrackTarget) Cleanup(allImages []string) { +func (g *DependencyTrackTarget) Cleanup(allImages []kubernetes.ContainerImage) { client, _ := dtrack.NewClient(g.baseUrl, dtrack.WithAPIKey(g.apiKey)) var ( @@ -113,9 +113,9 @@ func (g *DependencyTrackTarget) Cleanup(allImages []string) { allImageRefs := make([]parser.Reference, len(allImages)) for _, image := range allImages { - ref, err := parser.Parse(image) + ref, err := parser.Parse(image.Image) if err != nil { - logrus.WithError(err).Errorf("Could not parse image %s", image) + logrus.WithError(err).Errorf("Could not parse image %s", image.Image) continue } allImageRefs = append(allImageRefs, *ref) @@ -136,7 +136,7 @@ func (g *DependencyTrackTarget) Cleanup(allImages []string) { // Image used in current cluster for _, image := range allImages { - if image == currentImageName { + if image.Image == currentImageName { continue projectLoop } } diff --git a/internal/target/git_target.go b/internal/target/git_target.go index 7044f11a..7171decd 100644 --- a/internal/target/git_target.go +++ b/internal/target/git_target.go @@ -99,7 +99,7 @@ func (g *GitTarget) ProcessSbom(image kubernetes.ContainerImage, sbom string) er return g.gitAccount.CommitAll(g.workingTree, fmt.Sprintf("Created new SBOM for image %s", imageID)) } -func (g *GitTarget) Cleanup(allImages []string) { +func (g *GitTarget) Cleanup(allImages []kubernetes.ContainerImage) { logrus.Debug("Start to remove old SBOMs") ignoreDirs := []string{".git"} @@ -114,10 +114,10 @@ func (g *GitTarget) Cleanup(allImages []string) { } } -func (g *GitTarget) mapToFiles(allImages []string) []string { +func (g *GitTarget) mapToFiles(allImages []kubernetes.ContainerImage) []string { paths := []string{} for _, img := range allImages { - paths = append(paths, g.imageIDToFilePath(img)) + paths = append(paths, g.imageIDToFilePath(img.ImageID)) } return paths diff --git a/internal/target/target.go b/internal/target/target.go index 971c45c5..c969c0bf 100644 --- a/internal/target/target.go +++ b/internal/target/target.go @@ -8,5 +8,5 @@ type Target interface { Initialize() ValidateConfig() error ProcessSbom(image kubernetes.ContainerImage, sbom string) error - Cleanup(allImages []string) + Cleanup(allImages []kubernetes.ContainerImage) }