diff --git a/likec4/models/containers/argocd.c4 b/likec4/models/containers/argocd.c4 new file mode 100644 index 0000000..0864067 --- /dev/null +++ b/likec4/models/containers/argocd.c4 @@ -0,0 +1,24 @@ +model { + + extend edp { + container argoCD 'ArgoCD' { + description 'GitOps Service' + + component argocdServer 'ArgoCD Server' + component argocdAppController 'ApplicationController' + component argocdAppSetController 'ApplicationSeetController' + component argocdRedis 'Redis' { + technology: 'Redis' + icon: tech:redis + } + component argocdRepoServer 'Repo Server' + + argocdServer -> argocdRedis 'read/write' + argocdRepoServer -> argocdRedis 'read/write' + argocdAppController -> argocdRedis 'read/write' + argocdAppSetController -> argocdRedis 'read/write' + + argocdRepoServer -> edp.forgejo.forgejo 'Syncs git repo' + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/backstage.c4 b/likec4/models/containers/backstage.c4 new file mode 100644 index 0000000..fd323c6 --- /dev/null +++ b/likec4/models/containers/backstage.c4 @@ -0,0 +1,25 @@ +model { + + extend edp { + container ui 'Backstage' { + description 'Developer Portal' + + component backstage 'Backstage' { + style { + icon tech:react + shape browser + } + } + + component database 'Database' { + technology 'Postgresql' + icon tech:postgresql + style { + shape storage + } + } + + backstage -> database 'reads/writes' + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/crossplane.c4 b/likec4/models/containers/crossplane.c4 new file mode 100644 index 0000000..6452b8b --- /dev/null +++ b/likec4/models/containers/crossplane.c4 @@ -0,0 +1,16 @@ +model { + + extend edp { + container crossplane 'Crossplane' { + #internal + description 'Declarative management of ressources' + + component crossplane 'Crossplane' + component crossplaneFunction 'Function Patch and Transform' + component crossplaneRbacManager 'RBAC Manager' + component providerArgoCD 'ArgoCD Provider' + component providerKind 'Kind Provider' + component providerShell 'Shell Provider' + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/externalsecrets.c4 b/likec4/models/containers/externalsecrets.c4 new file mode 100644 index 0000000..f929e19 --- /dev/null +++ b/likec4/models/containers/externalsecrets.c4 @@ -0,0 +1,13 @@ +model { + + extend edp { + container externalSecrets 'external-secrets' { + #internal + description 'Provider to access externally stored Kubernetes secrets' + + component externalSecrets 'external-secrets controller' + component certController 'cert-controller' + component webhook 'webhook' + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/forgejo.c4 b/likec4/models/containers/forgejo.c4 new file mode 100644 index 0000000..65d2b99 --- /dev/null +++ b/likec4/models/containers/forgejo.c4 @@ -0,0 +1,28 @@ +model { + + extend edp { + container forgejo 'Forgejo' { + description ' + Fully managed DevOps Platfrom + offering capabilities like + code version controling + collaboration and ticketing + and security scanning + ' + component forgejo 'Forgejo' { + technology 'Golang' + icon tech:go + } + + component forgejoRunner 'CI Runner' { + technology 'Golang' + icon tech:go + style { + multiple true + } + } + + forgejoRunner -> forgejo 'executes pipelines' + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/ingress.c4 b/likec4/models/containers/ingress.c4 new file mode 100644 index 0000000..9a4af67 --- /dev/null +++ b/likec4/models/containers/ingress.c4 @@ -0,0 +1,25 @@ +model { + + extend edp { + container ingressNginx 'Ingress' { + #internal + description 'Ingress Controller for incoming http(s) traffic' + + component ingressNginx 'ingress-nginx' { + technology 'Nginx' + icon tech:nginx + } + + ingressNginx -> edp.forgejo.forgejo 'https' + ingressNginx -> edp.keycloak.keycloak 'https' + ingressNginx -> edp.openbao.openbao 'https' + ingressNginx -> edp.argoCD.argocdServer 'https' + ingressNginx -> edp.ui.backstage 'https' + ingressNginx -> edp.minio.minio 'https' + ingressNginx -> edp.monitoring.alloy 'https' + ingressNginx -> edp.monitoring.queryFrontend 'https' + ingressNginx -> testApp.fibonacci 'https' + ingressNginx -> mailhog.mailhog 'https' + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/keycloak.c4 b/likec4/models/containers/keycloak.c4 new file mode 100644 index 0000000..7f5ea08 --- /dev/null +++ b/likec4/models/containers/keycloak.c4 @@ -0,0 +1,21 @@ +model { + + extend edp { + container keycloak 'Keycloak' { + description 'Single Sign On for all EDP products' + component keycloak 'Keycloak' { + technology 'Java' + icon tech:java + } + + component keycloakDB 'Database' { + technology 'Postgresql' + icon tech:postgresql + style { + shape storage + } + } + keycloak -> keycloakDB 'reads/writes' + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/mailhog.c4 b/likec4/models/containers/mailhog.c4 new file mode 100644 index 0000000..c773c0f --- /dev/null +++ b/likec4/models/containers/mailhog.c4 @@ -0,0 +1,13 @@ +model { + + extend edp { + container mailhog 'Mailhog' { + description 'Web and API based SMTP testing' + + component mailhog 'Mailhog' { + technology 'Golang' + icon tech:go + } + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/minio.c4 b/likec4/models/containers/minio.c4 new file mode 100644 index 0000000..eb14fce --- /dev/null +++ b/likec4/models/containers/minio.c4 @@ -0,0 +1,15 @@ +model { + + extend edp { + container minio 'Minio' { + description 'S3 compatible blob storage' + + component minio 'S3 Blob Storage' { + technology 'Minio' + style { + shape storage + } + } + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/monitoring.c4 b/likec4/models/containers/monitoring.c4 new file mode 100644 index 0000000..226acde --- /dev/null +++ b/likec4/models/containers/monitoring.c4 @@ -0,0 +1,30 @@ +model { + + extend edp { + container monitoring 'Monitoring' { + description 'Observability system to monitor deployed components' + + component alloy 'Alloy' { + description 'Open Telemetry Collector' + + style { + icon tech:grafana + multiple true + } + } + + container loki 'Loki' { + description 'Log aggregation system' + icon tech:grafana + + component queryFrontend 'Query Frontend' + component distributor 'Distributor' + component gateway 'Gateway' + component ingestor 'Ingestor' + component querier 'Querier' + + alloy -> distributor 'pushes logs' + } + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/openbao.c4 b/likec4/models/containers/openbao.c4 new file mode 100644 index 0000000..039355a --- /dev/null +++ b/likec4/models/containers/openbao.c4 @@ -0,0 +1,17 @@ +model { + + extend edp { + container openbao 'OpenBao' { + description 'Secure secret storage' + + component openbao 'Openbao' { + technology 'Openbao' + style { + shape storage + } + } + + component agentInjector 'Agent Injector' + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/spark-operator.c4 b/likec4/models/containers/spark-operator.c4 new file mode 100644 index 0000000..92a73bb --- /dev/null +++ b/likec4/models/containers/spark-operator.c4 @@ -0,0 +1,14 @@ +model { + + extend edp { + container spark 'Spark' { + #internal + description 'Allows running Spark applications on K8s' + + component sparkoperator 'Spark Operator' { + technology 'Spark' + icon tech:spark + } + } + } +} \ No newline at end of file diff --git a/likec4/models/containers/velero.c4 b/likec4/models/containers/velero.c4 new file mode 100644 index 0000000..3676cbf --- /dev/null +++ b/likec4/models/containers/velero.c4 @@ -0,0 +1,13 @@ +model { + + extend edp { + container velero 'Velero' { + #internal + description 'Backup Kubernetes resources' + + component velero 'Velero' + + velero -> edp.minio.minio 'store backups' + } + } +} \ No newline at end of file diff --git a/likec4/models/context/cloud.c4 b/likec4/models/context/cloud.c4 index 4dd09b3..0602ac5 100644 --- a/likec4/models/context/cloud.c4 +++ b/likec4/models/context/cloud.c4 @@ -2,5 +2,13 @@ model { cloud = system 'Cloud' { description 'Cloud environments' technology 'IaaS/PaaS' + + application = schema 'application' { + description 'An application description' + technology 'DSL' + style { + color primary + } + } } } diff --git a/likec4/models/context/doc/desc.md b/likec4/models/context/doc/desc.md deleted file mode 100644 index 70d35a3..0000000 --- a/likec4/models/context/doc/desc.md +++ /dev/null @@ -1,6 +0,0 @@ -# Containers - -## Inner loop, outer loop - -![alt text](localdev.png) -* [What software delivery leaders need to know about inner & outer loops](https://curiositysoftware.medium.com/what-software-delivery-leaders-need-to-know-about-inner-outer-loops-9da765b0ca2c) \ No newline at end of file diff --git a/likec4/models/context/doc/localdev.png b/likec4/models/context/doc/localdev.png deleted file mode 100644 index 6de1218..0000000 Binary files a/likec4/models/context/doc/localdev.png and /dev/null differ diff --git a/likec4/models/context/edp.c4 b/likec4/models/context/edp.c4 index 438dbac..5588b81 100644 --- a/likec4/models/context/edp.c4 +++ b/likec4/models/context/edp.c4 @@ -1,193 +1,17 @@ model { edp = system 'EDP' { - description 'EDP Edge Development platform' + description 'EDP Edge Development Platform' technology 'Kubernetes' -> enterprise 'integrates' -> cloud 'deploys and observes' + -> localbox // inner-outer loop synchronization - container ui 'Backstage' { - description 'Developer Portal' - - component backstage 'Backstage' { + application = schema 'application' { + description 'An application description' + technology 'DSL' style { - icon tech:react - shape browser + color primary } - } - - component database 'Database' { - technology 'Postgresql' - icon tech:postgresql - style { - shape storage - } - } - - backstage -> database 'reads/writes' - } - - container forgejo 'Forgejo' { - description ' - Fully managed DevOps Platfrom - offering capabilities like - code version controling - collaboration and ticketing - and security scanning - ' - component forgejo 'Forgejo' { - technology 'Golang' - icon tech:go - } - - component forgejoRunner 'CI Runner'{ - technology 'Golang' - icon tech:go - style { - 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' { - technology: 'Redis' - icon: tech:redis - } - component argocdRepoServer 'Repo Server' - - argocdServer -> argocdRedis 'read/write' - argocdRepoServer -> argocdRedis 'read/write' - argocdAppController -> argocdRedis 'read/write' - argocdAppSetController -> argocdRedis 'read/write' - - argocdRepoServer -> edp.forgejo.forgejo 'Syncs git repo' - } - - container keycloak 'Keycloak' { - description ' - Single Sign On for all EDP products - ' - component keycloak 'Keycloak' { - technology 'Java' - icon tech:java - } - - component keycloakDB 'Database' { - technology 'Postgresql' - icon tech:postgresql - style { - shape storage - } - } - keycloak -> keycloakDB 'reads/writes' - } - - container crossplane 'Crossplane' { - #internal - description 'Declarative management of ressources' - - component crossplane 'Crossplane' - component crossplaneFunction 'Function Patch and Transform' - component crossplaneRbacManager 'RBAC Manager' - component providerArgoCD 'ArgoCD Provider' - component providerKind 'Kind Provider' - component providerShell 'Shell Provider' - } - - container externalSecrets 'external-secrets' { - #internal - description 'Provider to access externally stored Kubernetes secrets' - - component externalSecrets 'external-secrets controller' - component certController 'cert-controller' - component webhook 'webhook' - } - - container minio 'Minio' { - description 'S3 compatible blob storage' - - component minio 'S3 Blob Storage' { - technology 'Minio' - style { - shape storage - } - } - } - - container velero 'Velero' { - #internal - description 'Backup Kubernetes resources' - - component 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 { - icon tech:grafana - multiple true - } - } - - container loki 'Loki' { - description 'Log aggregation system' - icon tech:grafana - - component queryFrontend 'Query Frontend' - component distributor 'Distributor' - component gateway 'Gateway' - component ingestor 'Ingestor' - component querier 'Querier' - - alloy -> distributor 'pushes logs' - } - } - - container ingressNginx 'Ingress' { - #internal - description 'Ingress Controller for incoming http(s) traffic' - - component ingressNginx 'ingress-nginx'{ - technology 'Nginx' - icon tech:nginx - } - - ingressNginx -> edp.forgejo.forgejo 'https' - ingressNginx -> keycloak.keycloak 'https' - ingressNginx -> openbao.openbao 'https' - ingressNginx -> argoCD.argocdServer 'https' - ingressNginx -> ui.backstage 'https' - ingressNginx -> minio.minio 'https' - ingressNginx -> monitoring.alloy 'https' - ingressNginx -> monitoring.queryFrontend 'https' - ingressNginx -> testApp.fibonacci 'https' - ingressNginx -> mailhog.mailhog 'https' } container testApp 'Fibonacci' { @@ -199,29 +23,8 @@ model { } } - container mailhog 'Mailhog' { - #internal - description 'Web and API based SMTP testing' - - component mailhog 'Mailhog' { - technology 'Golang' - icon tech:go - } - } - - container spark 'Spark' { - description 'Allows running Spark applications on K8s' - - component sparkoperator 'Spark Operator' { - technology 'Spark' - icon tech:spark - } - } - // UI requests data from the Backend // ui -> backend 'fetches via HTTPS' - - -> localbox // inner-outer loop synchronization } } diff --git a/likec4/models/context/localbox.c4 b/likec4/models/context/localbox.c4 index 11ea30e..4290aed 100644 --- a/likec4/models/context/localbox.c4 +++ b/likec4/models/context/localbox.c4 @@ -4,5 +4,13 @@ model { technology 'Linux/Windows/Mac' -> edp 'inner-outer-loop synchronization' -> enterprise 'compyny integration' + + application = schema 'application' { + description 'An application description' + technology 'DSL' + style { + color primary + } + } } } diff --git a/likec4/models/spec.c4 b/likec4/models/spec.c4 index 6919210..80d9d22 100644 --- a/likec4/models/spec.c4 +++ b/likec4/models/spec.c4 @@ -5,7 +5,6 @@ specification { color green } } - element system element component element container { style { @@ -19,8 +18,10 @@ specification { } } - element workflow + element schema element step + element system + element workflow deploymentNode node deploymentNode environment diff --git a/likec4/views/application-transition.c4 b/likec4/views/application-transition.c4 new file mode 100644 index 0000000..cf86039 --- /dev/null +++ b/likec4/views/application-transition.c4 @@ -0,0 +1,35 @@ +views { + + // the application meta-definition travels through all deploying components + view application-transition { + title 'application-transistion' + // autoLayout LeftRight 100 100 + + // include * + exclude developer, localbox, edp, otherProductLifecycleRoles + exclude element.kind = workflow + include cloud, cloud.application + + group 'developer-scope' { + color green + opacity 20% + border none + include developer + include otherProductLifecycleRoles + + group 'Devops inner-loop' { + color gray + opacity 30% + border none + + include localbox, localbox.application + } + group 'Devops outer-loop' { + color gray + opacity 30% + border none + include edp, edp.application + } + } + } +} \ No newline at end of file diff --git a/likec4/views/edp.c4 b/likec4/views/edp.c4 index ad48823..490e553 100644 --- a/likec4/views/edp.c4 +++ b/likec4/views/edp.c4 @@ -1,5 +1,16 @@ views { + view edp of edp { + title 'Context view' + include * + exclude ingressNginx -> + exclude element.tag = #internal + + style * { + opacity 25% + } + } + view keycloak of edp.keycloak { include *, diff --git a/likec4/views/landscape.c4 b/likec4/views/landscape.c4 index 3f1598f..2c45469 100644 --- a/likec4/views/landscape.c4 +++ b/likec4/views/landscape.c4 @@ -1,6 +1,6 @@ views { - view overview { + view landscape { title 'Landscape view' autoLayout LeftRight 100 100 @@ -30,15 +30,4 @@ views { } } } - - view edp of edp { - title 'Context view' - include * - exclude ingressNginx -> - exclude element.tag = #internal - - style * { - opacity 25% - } - } } \ No newline at end of file