diff --git a/README.md b/README.md index 85edb00..cfcd1cb 100644 --- a/README.md +++ b/README.md @@ -62,11 +62,12 @@ options: ### Kubernetes resources -Supported `kind`/`apiVersion` resource types are 26 ones: +Supported `kind`/`apiVersion` resource types are 27 ones: * ClusterRole/rbac.authorization.k8s.io/v1 * ClusterRoleBinding/rbac.authorization.k8s.io/v1 -* CustomResourceDefinition/apiextensions.k8s.io/v1 * ConfigMap/v1 +* CronJob/batch/v1 +* CustomResourceDefinition/apiextensions.k8s.io/v1 * DaemonSet/apps/v1 * Deployment/apps/v1 * Group/rbac.authorization.k8s.io/v1 @@ -94,7 +95,7 @@ Supported `kind`/`apiVersion` resource types are 26 ones: **Note**: The mapping for any Kubernetes custom resources can be also defined into **KubeDiagrams** configuration files as illustrated in [examples/k0s/KubeDiagrams.yml](examples/k0s/KubeDiagrams.yml#L10). -Currently, unsupported `kind`/`apiGroup` resource types are 33 ones: +Currently, unsupported `kind`/`apiGroup` resource types are 32 ones: * Binding/ * ComponentStatus/ * Endpoints/ @@ -112,7 +113,6 @@ Currently, unsupported `kind`/`apiGroup` resource types are 33 ones: * SelfSubjectAccessReview/authorization.k8s.io * SelfSubjectRulesReview/authorization.k8s.io * SubjectAccessReview/authorization.k8s.io -* CronJob/batch * CertificateSigningRequest/certificates.k8s.io * Lease/coordination.k8s.io * EndpointSlice/discovery.k8s.io @@ -150,5 +150,5 @@ This project is licensed under the GPL-3.0 license - see the [LICENSE](LICENSE) ## Todo List * Add more examples -* Add missed Kubernetes resource types as at least CronJob, Endpoint, LimitRange, NetworkPolicy, and ResourceQuota +* Add missed Kubernetes resource types as at least Endpoint, LimitRange, NetworkPolicy, and ResourceQuota * Make `nodes/*/edges` more declarative diff --git a/bin/kube-diagrams b/bin/kube-diagrams index 1b3a941..d12148d 100755 --- a/bin/kube-diagrams +++ b/bin/kube-diagrams @@ -285,6 +285,17 @@ class EdgesContext(list): "REFERENCE" ]) + def add_owned_resources(self): + uid = query_path(self.resource, "metadata.uid") + for _, resource in resource_cluster.clusters["Namespace: %s" % self.namespace].resources.items(): + for ownerReference in query_path(resource, "metadata.ownerReferences", []): + if ownerReference.get("uid") == uid: + print(f"{resource['metadata']['name']}/{resource['metadata']['namespace']}/{resource['kind']}/{resource['apiVersion']}") + self.append([ + f"{resource['metadata']['name']}/{resource['metadata']['namespace']}/{resource['kind']}/{resource['apiVersion']}", + "OWNER" + ]) + # Parse arguments parser = argparse.ArgumentParser( prog="kube-diagrams", @@ -408,6 +419,7 @@ with Diagram("", filename=args.output, show=False, direction="TB", outformat=arg print("Edges script:\n", code_to_exec) print("Resource:") pprint(resource) + raise # generate diagram edges for edge in edges: edge_rid = edge[0] diff --git a/bin/kube-diagrams.yaml b/bin/kube-diagrams.yaml index 731d3f4..8db3395 100644 --- a/bin/kube-diagrams.yaml +++ b/bin/kube-diagrams.yaml @@ -10,6 +10,9 @@ edges: xlabel: controller color: black style: dotted + OWNER: + color: black + style: dotted DEPENDENCE: color: darkgrey UNDEFINED: @@ -38,14 +41,19 @@ nodes: edges: | edges.add_role("roleRef") edges.add_subjects() - CustomResourceDefinition/apiextensions.k8s.io/v1: - scope: Cluster - diagram_node_classname: diagrams.k8s.others.CRD - # no edges ConfigMap/v1: scope: Namespaced diagram_node_classname: diagrams.k8s.podconfig.CM # no edges + CronJob/batch/v1: + scope: Namespaced + diagram_node_classname: diagrams.k8s.compute.Cronjob + edges: | + edges.add_owned_resources() + CustomResourceDefinition/apiextensions.k8s.io/v1: + scope: Cluster + diagram_node_classname: diagrams.k8s.others.CRD + # no edges DaemonSet/apps/v1: scope: Namespaced diagram_node_classname: diagrams.k8s.compute.DS