From f9a7d18df4ddf65a6e6cec9635938f095e493efa Mon Sep 17 00:00:00 2001 From: Waldemar Date: Mon, 31 Mar 2025 16:26:46 +0200 Subject: [PATCH] Added more models --- likec4/deployment.c4 | 2 + likec4/model.c4 | 171 +++++++++++++++++++++++++++++++++++++++---- likec4/spec.c4 | 7 ++ 3 files changed, 166 insertions(+), 14 deletions(-) diff --git a/likec4/deployment.c4 b/likec4/deployment.c4 index d1bb2ae..655514e 100644 --- a/likec4/deployment.c4 +++ b/likec4/deployment.c4 @@ -11,6 +11,8 @@ deployment { instanceOf edp.ui instanceOf edp.forgejo + instanceOf edp.keycloak + instanceOf edp.crossplane } } diff --git a/likec4/model.c4 b/likec4/model.c4 index 3779f90..c680d6e 100644 --- a/likec4/model.c4 +++ b/likec4/model.c4 @@ -4,13 +4,28 @@ model { } edp = system 'EDP' { + container ui 'Backstage' { description 'Deeveloper Portal' - style { - icon tech:react - shape browser + + component backstage 'Backstage' { + style { + icon tech:react + shape browser + } } + + component database 'Database' { + technology 'Postgresql' + icon tech:postgresql + style { + shape storage + } + } + + backstage -> database 'reads/writes' } + container forgejo 'CI/CD Service' { description ' Fully managed DevOps Platfrom @@ -23,6 +38,7 @@ model { technology 'Golang' icon tech:go } + component forgejoRunner 'CI Runner'{ technology 'Golang' icon tech:go @@ -30,25 +46,42 @@ model { multiple true } } + forgejoRunner -> forgejo 'executes pipelines' } + + container argoCD 'ArgoCD' { + description 'GitOps Service' + + component argocdServer 'ArgoCD Server' + component argocdAppController 'ApplicationController' + component argocdAppSetController 'ApplicationSeetController' + component argocdRedis 'Redis' + component argocdRepoServer 'Repo Server' + } + container keycloak 'Keycloak' { description ' Single Sign On for all EDP products ' component keycloak 'Keycloak' { - technology 'Keycloak' + technology 'Java' icon tech:java } - component postgres 'Postgres' { + + component database 'Database' { technology 'Postgresql' icon tech:postgresql + style { + shape storage + } } - // -> db 'reads/writes' + keycloak -> database 'reads/writes' } container crossplane 'Crossplane' { - description 'Managing cloud infrastructure' + description 'Declarative management of ressources' + component crossplane 'Crossplane' component crossplaneFunction 'Function Patch and Transform' component crossplaneRbacManager 'RBAC Manager' @@ -57,12 +90,86 @@ model { component providerShell 'Shell Provider' } - /*db = component 'Database' { - icon tech:postgresql - style { - shape storage + container externalSecrets 'external-secrets' { + description 'Provider to access externally stored Kubernetes secrets' + + internalComponent externalSecrets 'external-secrets controller' + internalComponent certController 'cert-controller' + internalComponent webhook 'webhook' + } + + container minio 'Minio' { + description 'S3 compatible blob storage' + + component minio 'S3 Blob Storage' { + technology 'Minio' + style { + shape storage + } } - }*/ + } + + container velero 'Velero' { + description 'Backup Kubernetes resources' + + component velero 'Velero' + } + + velero.velero -> minio.minio 'store backups' + + container openbao 'OpenBao' { + description 'Secure secret storage' + + component openbao 'Openbao' { + technology 'Openbao' + style { + shape storage + } + } + + component agentInjector 'Agent Injector' + } + + container monitoring 'Monitoring' { + description 'Observability system to monitor deployed components' + + component alloy 'Alloy' { + description 'Open Telemetry Collector' + + style { + multiple true + } + } + + container loki 'Loki' { + description 'Log aggregation system' + + component queryFrontend 'Query Frontend' + component distributor 'Distributor' + component gateway 'Gateway' + component ingestor 'Ingestor' + component querier 'Querier' + } + + alloy -> loki 'pushes logs' + } + + container ingressNginx 'Ingress' { + description 'Ingress Controller for incoming http(s) traffic' + + component ingressNginx 'ingress-nginx'{ + technology 'Nginx' + icon tech:nginx + } + + ingressNginx -> forgejo 'Ingress' + ingressNginx -> keycloak 'Ingress' + ingressNginx -> openbao 'Ingress' + ingressNginx -> argocdServer 'Ingress' + ingressNginx -> backstage 'Ingress' + ingressNginx -> minio 'Ingress' + ingressNginx -> alloy 'Ingress' + } // UI requests data from the Backend // ui -> backend 'fetches via HTTPS' @@ -84,6 +191,7 @@ views { view edp of edp { title 'Context view' include * + exclude ingressNginx -> style * { opacity 25% @@ -94,14 +202,49 @@ views { } view keycloak of keycloak { - include * + include + *, + ingressNginx -> } view forgejo of forgejo { - include * + include + *, + ingressNginx -> } view crossplane of crossplane { + include + *, + ingressNginx -> + } + + view externalSecrets of externalSecrets { + include + *, + ingressNginx -> + } + + view velero of velero { + include + *, + ingressNginx -> + } + + view minio of minio { + include + *, + ingressNginx -> + } + + view monitoring of monitoring { + include + *, + ingressNginx ->, + loki.* + } + + view ingressNginx of ingressNginx { include * } diff --git a/likec4/spec.c4 b/likec4/spec.c4 index da792ce..792c6e9 100644 --- a/likec4/spec.c4 +++ b/likec4/spec.c4 @@ -2,6 +2,7 @@ specification { element actor { style { shape person + color green } } element system @@ -11,6 +12,12 @@ specification { opacity 20% } } + element internalComponent { + style { + color muted + opacity 15% + } + } deploymentNode node deploymentNode environment {