Add support for Cronjob resources

This commit is contained in:
Philippe Merle
2024-12-30 08:41:09 +01:00
parent 7c2390b4d7
commit 53d0440f81
3 changed files with 29 additions and 9 deletions

View File

@@ -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

View File

@@ -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]

View File

@@ -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