diff --git a/pkg/collect/cluster_resources.go b/pkg/collect/cluster_resources.go index 8aa5b3c8..ff052d6d 100644 --- a/pkg/collect/cluster_resources.go +++ b/pkg/collect/cluster_resources.go @@ -156,6 +156,14 @@ func ClusterResources(c *Collector, clusterResourcesCollector *troubleshootv1bet } output.SaveResult(c.BundlePath, "cluster-resources/ingress-errors.json", marshalErrors(ingressErrors)) + // network policy + networkPolicy, networkPolicyErrors := networkPolicy(ctx, client, namespaceNames) + for k, v := range networkPolicy { + output.SaveResult(c.BundlePath, path.Join("cluster-resources/network-policy", k), bytes.NewBuffer(v)) + } + output.SaveResult(c.BundlePath, "cluster-resources/network-policy-errors.json", marshalErrors(networkPolicyErrors)) + + // storage classes storageClasses, storageErrors := storageClasses(ctx, client) output.SaveResult(c.BundlePath, "cluster-resources/storage-classes.json", bytes.NewBuffer(storageClasses)) @@ -655,6 +663,41 @@ func ingressV1beta(ctx context.Context, client *kubernetes.Clientset, namespaces return ingressByNamespace, errorsByNamespace } +func networkPolicy(ctx context.Context, client *kubernetes.Clientset, namespaces []string) (map[string][]byte, map[string]string) { + networkPolicyByNamespace := make(map[string][]byte) + errorsByNamespace := make(map[string]string) + + for _, namespace := range namespaces { + networkPolicy, err := client.NetworkingV1().NetworkPolicies(namespace).List(ctx, metav1.ListOptions{}) + if err != nil { + errorsByNamespace[namespace] = err.Error() + continue + } + + gvk, err := apiutil.GVKForObject(networkPolicy, scheme.Scheme) + if err == nil { + networkPolicy.GetObjectKind().SetGroupVersionKind(gvk) + } + + for i, o := range networkPolicy.Items { + gvk, err := apiutil.GVKForObject(&o, scheme.Scheme) + if err == nil { + networkPolicy.Items[i].GetObjectKind().SetGroupVersionKind(gvk) + } + } + + b, err := json.MarshalIndent(networkPolicy, "", " ") + if err != nil { + errorsByNamespace[namespace] = err.Error() + continue + } + + networkPolicyByNamespace[namespace+".json"] = b + } + + return networkPolicyByNamespace, errorsByNamespace +} + func storageClasses(ctx context.Context, client *kubernetes.Clientset) ([]byte, []string) { ok, err := discovery.HasResource(client, "storage.k8s.io/v1", "StorageClass") if err != nil {