From f58080b6043124e2565fc201172fa48cd4f378c3 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 9 Aug 2022 11:20:38 +0100 Subject: [PATCH 1/2] Collect networkPolicies Signed-off-by: Dan Jones --- pkg/collect/cluster_resources.go | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/pkg/collect/cluster_resources.go b/pkg/collect/cluster_resources.go index 0b63057c..2a18eda7 100644 --- a/pkg/collect/cluster_resources.go +++ b/pkg/collect/cluster_resources.go @@ -148,6 +148,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/networkPolicy", k), bytes.NewBuffer(v)) + } + output.SaveResult(c.BundlePath, "cluster-resources/networkPolicy-errors.json", marshalErrors(networkPolicyErrors)) + + // storage classes storageClasses, storageErrors := storageClasses(ctx, client) output.SaveResult(c.BundlePath, "cluster-resources/storage-classes.json", bytes.NewBuffer(storageClasses)) @@ -619,6 +627,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 { From ed0d252f39fd8719433740ecf26c6ab46e2dc6f5 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Tue, 9 Aug 2022 14:38:32 +0100 Subject: [PATCH 2/2] Rename output directory to be consistent with others Signed-off-by: Dan Jones --- pkg/collect/cluster_resources.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/collect/cluster_resources.go b/pkg/collect/cluster_resources.go index 2a18eda7..1bd02676 100644 --- a/pkg/collect/cluster_resources.go +++ b/pkg/collect/cluster_resources.go @@ -151,9 +151,9 @@ func ClusterResources(c *Collector, clusterResourcesCollector *troubleshootv1bet // network policy networkPolicy, networkPolicyErrors := networkPolicy(ctx, client, namespaceNames) for k, v := range networkPolicy { - output.SaveResult(c.BundlePath, path.Join("cluster-resources/networkPolicy", k), bytes.NewBuffer(v)) + output.SaveResult(c.BundlePath, path.Join("cluster-resources/network-policy", k), bytes.NewBuffer(v)) } - output.SaveResult(c.BundlePath, "cluster-resources/networkPolicy-errors.json", marshalErrors(networkPolicyErrors)) + output.SaveResult(c.BundlePath, "cluster-resources/network-policy-errors.json", marshalErrors(networkPolicyErrors)) // storage classes