refactor(c4-edp): extracted all components from edp as ectending models in single files

This commit is contained in:
Stephan Lo 2025-04-06 18:43:29 +02:00
parent 9a60bf2637
commit 8c78105c07
22 changed files with 326 additions and 223 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,13 @@
model {
extend edp {
container velero 'Velero' {
#internal
description 'Backup Kubernetes resources'
component velero 'Velero'
velero -> edp.minio.minio 'store backups'
}
}
}

View file

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

View file

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 KiB

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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