Skip to content

Commit

Permalink
Don't continue if list namespaces failes
Browse files Browse the repository at this point in the history
We had some networking issues in our cluster. This caused a ListNamespaces to fail. This caused the sbom-operator to delete all sboms in our git directory.
Christoph Petrausch authored and ckotzbauer committed May 6, 2022
1 parent 49e30be commit c68c429
Showing 3 changed files with 22 additions and 11 deletions.
7 changes: 6 additions & 1 deletion internal/daemon/daemon.go
Original file line number Diff line number Diff line change
@@ -67,7 +67,12 @@ func (c *CronService) runBackgroundService() {
}

k8s := kubernetes.NewClient()
namespaces := k8s.ListNamespaces(viper.GetString(internal.ConfigKeyNamespaceLabelSelector))
namespaceSelector := viper.GetString(internal.ConfigKeyNamespaceLabelSelector)
namespaces, err := k8s.ListNamespaces(namespaceSelector)
if err != nil {
logrus.WithError(err).Errorf("failed to list namespaces with selector: %s, abort background-service", namespaceSelector)
return
}
logrus.Debugf("Discovered %v namespaces", len(namespaces))
containerImages, allImages := k8s.LoadImageInfos(namespaces, viper.GetString(internal.ConfigKeyPodLabelSelector))

20 changes: 11 additions & 9 deletions internal/kubernetes/kubernetes.go
Original file line number Diff line number Diff line change
@@ -66,34 +66,36 @@ func prepareLabelSelector(selector string) meta.ListOptions {
return listOptions
}

func (client *KubeClient) ListNamespaces(labelSelector string) []corev1.Namespace {
func (client *KubeClient) ListNamespaces(labelSelector string) ([]corev1.Namespace, error) {
list, err := client.Client.CoreV1().Namespaces().List(context.Background(), prepareLabelSelector(labelSelector))

if err != nil {
logrus.WithError(err).Error("ListNamespaces errored!")
return []corev1.Namespace{}
return []corev1.Namespace{}, fmt.Errorf("failed to list namespaces")
}

return list.Items
return list.Items, nil
}

func (client *KubeClient) listPods(namespace, labelSelector string) []corev1.Pod {
func (client *KubeClient) listPods(namespace, labelSelector string) ([]corev1.Pod, error) {
list, err := client.Client.CoreV1().Pods(namespace).List(context.Background(), prepareLabelSelector(labelSelector))

if err != nil {
logrus.WithError(err).Error("ListPods errored!")
return []corev1.Pod{}
return []corev1.Pod{}, fmt.Errorf("failed to list pods: %w", err)
}

return list.Items
return list.Items, nil
}

func (client *KubeClient) LoadImageInfos(namespaces []corev1.Namespace, podLabelSelector string) (map[string]ContainerImage, []ContainerImage) {
images := map[string]ContainerImage{}
allImages := []ContainerImage{}

for _, ns := range namespaces {
pods := client.listPods(ns.Name, podLabelSelector)
pods, err := client.listPods(ns.Name, podLabelSelector)
if err != nil {
logrus.WithError(err).Errorf("failed to list pods for namespace: %s", ns.Name)
continue
}

for _, pod := range pods {
annotations := pod.Annotations
6 changes: 5 additions & 1 deletion internal/target/dtrack_target.go
Original file line number Diff line number Diff line change
@@ -65,7 +65,11 @@ func (g *DependencyTrackTarget) ProcessSbom(image kubernetes.ContainerImage, sbo
return nil
}

client, _ := dtrack.NewClient(g.baseUrl, dtrack.WithAPIKey(g.apiKey))
client, err := dtrack.NewClient(g.baseUrl, dtrack.WithAPIKey(g.apiKey))
if err != nil {
logrus.WithError(err).Errorf("failed to init dtrack client")
return err
}

logrus.Infof("Sending SBOM to Dependency Track (project=%s, version=%s)", projectName, version)

0 comments on commit c68c429

Please sign in to comment.