Merge branch 'development' into feature/tech-doc-refactoring
14
devbox.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.14.0/.schema/devbox.schema.json",
|
||||
"packages": ["nodejs@latest"],
|
||||
"shell": {
|
||||
"init_hook": [
|
||||
"echo 'Welcome to devbox!' > /dev/null"
|
||||
],
|
||||
"scripts": {
|
||||
"test": [
|
||||
"echo \"Error: no test specified\" && exit 1"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
73
devbox.lock
Normal file
|
@ -0,0 +1,73 @@
|
|||
{
|
||||
"lockfile_version": "1",
|
||||
"packages": {
|
||||
"github:NixOS/nixpkgs/nixpkgs-unstable": {
|
||||
"resolved": "github:NixOS/nixpkgs/2d9e4457f8e83120c9fdf6f1707ed0bc603e5ac9?lastModified=1741462378&narHash=sha256-ZF3YOjq%2BvTcH51S%2BqWa1oGA9FgmdJ67nTNPG2OIlXDc%3D"
|
||||
},
|
||||
"nodejs@latest": {
|
||||
"last_modified": "2025-03-16T16:17:41Z",
|
||||
"plugin_version": "0.0.2",
|
||||
"resolved": "github:NixOS/nixpkgs/8f76cf16b17c51ae0cc8e55488069593f6dab645#nodejs_23",
|
||||
"source": "devbox-search",
|
||||
"version": "23.10.0",
|
||||
"systems": {
|
||||
"aarch64-darwin": {
|
||||
"outputs": [
|
||||
{
|
||||
"name": "out",
|
||||
"path": "/nix/store/dihlffh62qmgzsrxq1igwxicdyr3fn8a-nodejs-23.10.0",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "libv8",
|
||||
"path": "/nix/store/ks94i4365833bykrzg3d3mqxnciygyrn-nodejs-23.10.0-libv8"
|
||||
}
|
||||
],
|
||||
"store_path": "/nix/store/dihlffh62qmgzsrxq1igwxicdyr3fn8a-nodejs-23.10.0"
|
||||
},
|
||||
"aarch64-linux": {
|
||||
"outputs": [
|
||||
{
|
||||
"name": "out",
|
||||
"path": "/nix/store/m7j1lf8a4z5bfla1m78pa3y12888hl7b-nodejs-23.10.0",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "libv8",
|
||||
"path": "/nix/store/kfvlfxx83n2w2fyb8hiz4p4dc165r035-nodejs-23.10.0-libv8"
|
||||
}
|
||||
],
|
||||
"store_path": "/nix/store/m7j1lf8a4z5bfla1m78pa3y12888hl7b-nodejs-23.10.0"
|
||||
},
|
||||
"x86_64-darwin": {
|
||||
"outputs": [
|
||||
{
|
||||
"name": "out",
|
||||
"path": "/nix/store/nj0d1lc4nanqj7v4ibcgd26m3p5yfb0h-nodejs-23.10.0",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "libv8",
|
||||
"path": "/nix/store/k5rvmvqyibamfxa7cfzjfd5ldmi38kf3-nodejs-23.10.0-libv8"
|
||||
}
|
||||
],
|
||||
"store_path": "/nix/store/nj0d1lc4nanqj7v4ibcgd26m3p5yfb0h-nodejs-23.10.0"
|
||||
},
|
||||
"x86_64-linux": {
|
||||
"outputs": [
|
||||
{
|
||||
"name": "out",
|
||||
"path": "/nix/store/m7imcmwi4hschl257dzc33gxciqlf4bm-nodejs-23.10.0",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "libv8",
|
||||
"path": "/nix/store/wy7ysxmd2ygdc5zpbhf9ripwgvvvnwsd-nodejs-23.10.0-libv8"
|
||||
}
|
||||
],
|
||||
"store_path": "/nix/store/m7imcmwi4hschl257dzc33gxciqlf4bm-nodejs-23.10.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"name": "project-management"
|
||||
}
|
1
likec4/README.md
Normal file
|
@ -0,0 +1 @@
|
|||
Run ´npx likec4 start´ to start dev server
|
14
likec4/devbox.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.14.0/.schema/devbox.schema.json",
|
||||
"packages": ["nodejs@latest"],
|
||||
"shell": {
|
||||
"init_hook": [
|
||||
"echo 'Welcome to devbox!' > /dev/null"
|
||||
],
|
||||
"scripts": {
|
||||
"test": [
|
||||
"echo \"Error: no test specified\" && exit 1"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
73
likec4/devbox.lock
Normal file
|
@ -0,0 +1,73 @@
|
|||
{
|
||||
"lockfile_version": "1",
|
||||
"packages": {
|
||||
"github:NixOS/nixpkgs/nixpkgs-unstable": {
|
||||
"resolved": "github:NixOS/nixpkgs/250b695f41e0e2f5afbf15c6b12480de1fe0001b?lastModified=1743814133&narHash=sha256-drDyYyUmjeYGiHmwB9eOPTQRjmrq3Yz26knwmMPLZFk%3D"
|
||||
},
|
||||
"nodejs@latest": {
|
||||
"last_modified": "2025-03-16T16:17:41Z",
|
||||
"plugin_version": "0.0.2",
|
||||
"resolved": "github:NixOS/nixpkgs/8f76cf16b17c51ae0cc8e55488069593f6dab645#nodejs_23",
|
||||
"source": "devbox-search",
|
||||
"version": "23.10.0",
|
||||
"systems": {
|
||||
"aarch64-darwin": {
|
||||
"outputs": [
|
||||
{
|
||||
"name": "out",
|
||||
"path": "/nix/store/dihlffh62qmgzsrxq1igwxicdyr3fn8a-nodejs-23.10.0",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "libv8",
|
||||
"path": "/nix/store/ks94i4365833bykrzg3d3mqxnciygyrn-nodejs-23.10.0-libv8"
|
||||
}
|
||||
],
|
||||
"store_path": "/nix/store/dihlffh62qmgzsrxq1igwxicdyr3fn8a-nodejs-23.10.0"
|
||||
},
|
||||
"aarch64-linux": {
|
||||
"outputs": [
|
||||
{
|
||||
"name": "out",
|
||||
"path": "/nix/store/m7j1lf8a4z5bfla1m78pa3y12888hl7b-nodejs-23.10.0",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "libv8",
|
||||
"path": "/nix/store/kfvlfxx83n2w2fyb8hiz4p4dc165r035-nodejs-23.10.0-libv8"
|
||||
}
|
||||
],
|
||||
"store_path": "/nix/store/m7j1lf8a4z5bfla1m78pa3y12888hl7b-nodejs-23.10.0"
|
||||
},
|
||||
"x86_64-darwin": {
|
||||
"outputs": [
|
||||
{
|
||||
"name": "out",
|
||||
"path": "/nix/store/nj0d1lc4nanqj7v4ibcgd26m3p5yfb0h-nodejs-23.10.0",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "libv8",
|
||||
"path": "/nix/store/k5rvmvqyibamfxa7cfzjfd5ldmi38kf3-nodejs-23.10.0-libv8"
|
||||
}
|
||||
],
|
||||
"store_path": "/nix/store/nj0d1lc4nanqj7v4ibcgd26m3p5yfb0h-nodejs-23.10.0"
|
||||
},
|
||||
"x86_64-linux": {
|
||||
"outputs": [
|
||||
{
|
||||
"name": "out",
|
||||
"path": "/nix/store/m7imcmwi4hschl257dzc33gxciqlf4bm-nodejs-23.10.0",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "libv8",
|
||||
"path": "/nix/store/wy7ysxmd2ygdc5zpbhf9ripwgvvvnwsd-nodejs-23.10.0-libv8"
|
||||
}
|
||||
],
|
||||
"store_path": "/nix/store/m7imcmwi4hschl257dzc33gxciqlf4bm-nodejs-23.10.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
BIN
likec4/doc/developer-landscape/cicd-outerloop-2.png
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
likec4/doc/developer-landscape/cicd-outerloop-draft.png
Normal file
After Width: | Height: | Size: 467 KiB |
BIN
likec4/doc/developer-landscape/cicd-outerloop.png
Normal file
After Width: | Height: | Size: 88 KiB |
44
likec4/doc/developer-landscape/devday-presentation.md
Normal file
|
@ -0,0 +1,44 @@
|
|||
# Developer landscape with respect to DevOps Inner-Outer loop
|
||||
|
||||
## Inner loop, outer loop
|
||||
|
||||

|
||||
|
||||
* [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)
|
||||
|
||||
* (original articale is here](https://www.curiositysoftware.ie/blog/software-delivery-leaders-guide-inner-outer-loops)
|
||||
|
||||
## Landscape
|
||||
|
||||
### Draft
|
||||
|
||||

|
||||
|
||||
### C4
|
||||
|
||||
See [developer-landscape](../../views/landscape.c4)
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
## CI/CD Outerloop
|
||||
|
||||
### Draft
|
||||
|
||||

|
||||
|
||||
ArgoCD and Cloud are CD, Forgejo is CI
|
||||
|
||||
### C4
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
## PPT
|
||||
|
||||

|
BIN
likec4/doc/developer-landscape/developer-landscape-view-c4-2.png
Normal file
After Width: | Height: | Size: 121 KiB |
After Width: | Height: | Size: 240 KiB |
After Width: | Height: | Size: 265 KiB |
BIN
likec4/doc/developer-landscape/developer-landscape-view-c4.png
Normal file
After Width: | Height: | Size: 178 KiB |
After Width: | Height: | Size: 374 KiB |
BIN
likec4/doc/developer-landscape/localdev.png
Normal file
After Width: | Height: | Size: 238 KiB |
BIN
likec4/doc/developer-landscape/slide-1.png
Normal file
After Width: | Height: | Size: 475 KiB |
3
likec4/likec4.config.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"name": "architecture"
|
||||
}
|
111
likec4/models/code/workflow.c4
Normal file
|
@ -0,0 +1,111 @@
|
|||
model {
|
||||
workflow edfbuilder_workflow "EDFbuilder" {
|
||||
step runEDP "Run edpbuilder script" {
|
||||
style {
|
||||
opacity 25%
|
||||
}
|
||||
step createCrossplaneNS "Create Crossplane namespace"
|
||||
step installCrossplaneHelm "Install Crossplane Helm Chart"
|
||||
step installCrossplaneFunctionsAndProviders "Install Crossplane Functions and Providers"
|
||||
step waitForCrossplaneFunctionsAndProviders "Wait for Crossplane Functions and Providers to become available"
|
||||
step setupCrossplaneServiceAccount "Apply cluster-admin role to crossplane shell provider service account"
|
||||
step createArgoCdNS "Create ArgoCD namespace"
|
||||
step createGiteaNS "Create Gitea namespace"
|
||||
step createArgoCdTlsCert "Create TLS Cert for Argo"
|
||||
step createGiteaTlsCert "Create TLS Cert for Forgejo"
|
||||
step createEDFBuilderDefinition "Create EDFbuilder crossplane definition (defines API)"
|
||||
step createEDFBuilderComposition "Create EDFbuilder crossplane composition (defines what happens when EDFbuilder is applied)"
|
||||
}
|
||||
|
||||
step applyEDFBuilder "Applies EDFbuilder resource (and triggers creation)" {
|
||||
style {
|
||||
opacity 15%
|
||||
}
|
||||
|
||||
step setEnvVars "Set required environment variables"
|
||||
step readWriteKubeConf "Make kube.conf write/readbale"
|
||||
step setWorkDir "Set workdir to /tmp/rundir"
|
||||
step cloneStacksRepo "Clone steps repo and checkout desired branch"
|
||||
step hydrateStacksWithValues "Hydrate Stacks with values"
|
||||
step createNamespaces "Create all required namespaces"
|
||||
step createGiteaAdminPass "Create Admin Password for Forgejo"
|
||||
step createGrafanaPass "Create Grafana Admin Password"
|
||||
step applyServiceMonitorCRD "Apply ServiceMonitor CRDs for Prometheus"
|
||||
step cloneIngressNginxChart "Git clone ingress-nginx helm chart"
|
||||
step isntallIngressNginx "Install ingress-nginx from cloned chart"
|
||||
step waitForIngress "Wait till ingress-nginx is ready"
|
||||
step cloneArgoCDHelm "Git clone ArgoCD Helm Chart"
|
||||
step installArgoCD "Install ArgoCD Helm Chart"
|
||||
step installArgoCDIngress "Install ingress for ArgoCD"
|
||||
step cloneForgejoHelmChart "Git clone Forgejo Helm Chart"
|
||||
step installForgejo "Install Forgejo Helm Chart"
|
||||
step installForgejoIngress "Install ingress for Forgejo"
|
||||
step waitForArgoCD "Wait till ArgoCD is available"
|
||||
step waitForForgejo "Wait till Forgejo is available"
|
||||
step createForgejoUser "Create technical user for Forgejo"
|
||||
step createForgejoRepo "Create repository for EDP state in Forgejo"
|
||||
step installForgejoRunner "Install Forgejo Runner deployment"
|
||||
step registerForgejoRunner "Create registration token secret for runner"
|
||||
step configGitIdentity "Configure Git identity"
|
||||
step configCrossplaneArgoCDProvider "Configure Crossplane ArgoCD provider"
|
||||
step configCrossplaneKindProvider "Configure Crossplane Kind provider"
|
||||
step uploadStacksToForgjo "Git push hydrated stacks to Forgejo isntance"
|
||||
step configArgoDockerRegistry "Configure Docker Registry for Argo Workflows"
|
||||
step createPackagesForgejoUser "Create packages user and token in Forgejo (unused?)"
|
||||
step installArgoCDStacks "Apply all selected ArgoCD stacks"
|
||||
step cleanup "Cleanup work folder and unset all env vars"
|
||||
|
||||
setEnvVars -> readWriteKubeConf
|
||||
readWriteKubeConf -> setWorkDir
|
||||
setWorkDir -> cloneStacksRepo
|
||||
cloneStacksRepo -> hydrateStacksWithValues
|
||||
hydrateStacksWithValues -> createNamespaces
|
||||
createNamespaces -> createGiteaAdminPass
|
||||
createGiteaAdminPass -> createGrafanaPass
|
||||
createGrafanaPass -> applyServiceMonitorCRD
|
||||
applyServiceMonitorCRD -> cloneIngressNginxChart
|
||||
cloneIngressNginxChart -> isntallIngressNginx
|
||||
isntallIngressNginx -> waitForIngress
|
||||
waitForIngress -> cloneArgoCDHelm
|
||||
cloneArgoCDHelm -> installArgoCD
|
||||
installArgoCD -> installArgoCDIngress
|
||||
installArgoCDIngress -> cloneForgejoHelmChart
|
||||
cloneForgejoHelmChart -> installForgejo
|
||||
installForgejo -> installForgejoIngress
|
||||
installForgejoIngress -> waitForArgoCD
|
||||
waitForArgoCD -> waitForForgejo
|
||||
waitForForgejo -> createForgejoUser
|
||||
createForgejoUser -> createForgejoRepo
|
||||
createForgejoRepo -> installForgejoRunner
|
||||
installForgejoRunner -> registerForgejoRunner
|
||||
registerForgejoRunner -> configGitIdentity
|
||||
configGitIdentity -> configCrossplaneArgoCDProvider
|
||||
configCrossplaneArgoCDProvider -> configCrossplaneKindProvider
|
||||
configCrossplaneKindProvider -> uploadStacksToForgjo
|
||||
uploadStacksToForgjo -> configArgoDockerRegistry
|
||||
configArgoDockerRegistry -> createPackagesForgejoUser
|
||||
createPackagesForgejoUser -> installArgoCDStacks
|
||||
installArgoCDStacks -> cleanup
|
||||
}
|
||||
|
||||
createCrossplaneNS -> installCrossplaneHelm
|
||||
installCrossplaneHelm -> installCrossplaneFunctionsAndProviders
|
||||
installCrossplaneFunctionsAndProviders -> waitForCrossplaneFunctionsAndProviders
|
||||
waitForCrossplaneFunctionsAndProviders -> setupCrossplaneServiceAccount
|
||||
setupCrossplaneServiceAccount -> createArgoCdNS
|
||||
createArgoCdNS -> createGiteaNS
|
||||
createGiteaNS -> createArgoCdTlsCert
|
||||
createArgoCdTlsCert -> createGiteaTlsCert
|
||||
createGiteaTlsCert -> createEDFBuilderDefinition
|
||||
createEDFBuilderDefinition -> createEDFBuilderComposition
|
||||
createEDFBuilderComposition -> applyEDFBuilder
|
||||
}
|
||||
}
|
||||
|
||||
views {
|
||||
view edpbuilderworkflow of edfbuilder {
|
||||
description 'Describes the process how to create an EDP instance'
|
||||
include edfbuilder.**
|
||||
autoLayout LeftRight 120 110
|
||||
}
|
||||
}
|
16
likec4/models/components/application-specification.c4
Normal file
|
@ -0,0 +1,16 @@
|
|||
model {
|
||||
component applicationspecification "application-specification" {
|
||||
description 'The application specification describes the application and its components. It is used to generate the application and its components.'
|
||||
|
||||
component application_gitrepo 'Git App Repo' {
|
||||
description 'Git Application Repository'
|
||||
technology 'Git'
|
||||
icon tech:git
|
||||
}
|
||||
component applicationspec_gitrepo 'Git AppSpec Repo' {
|
||||
description 'Git Application Specification Repository'
|
||||
technology 'Git'
|
||||
icon tech:git
|
||||
}
|
||||
}
|
||||
}
|
13
likec4/models/components/tools.c4
Normal file
|
@ -0,0 +1,13 @@
|
|||
model {
|
||||
component edfbuilder "edfbuilder" {
|
||||
description 'EDP Foundry Builder'
|
||||
technology 'Golang'
|
||||
icon tech:go
|
||||
style {
|
||||
shape rectangle
|
||||
}
|
||||
-> edf "boots one"
|
||||
platformdeveloper -> edfbuilder "runs"
|
||||
}
|
||||
|
||||
}
|
9
likec4/models/containers/api.c4
Normal file
|
@ -0,0 +1,9 @@
|
|||
model {
|
||||
|
||||
extend edp {
|
||||
container api 'API' {
|
||||
description 'API for the EDP platform'
|
||||
icon tech:swagger
|
||||
}
|
||||
}
|
||||
}
|
24
likec4/models/containers/argocd.c4
Normal 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.forgejogit 'Syncs git repo'
|
||||
}
|
||||
}
|
||||
}
|
25
likec4/models/containers/backstage.c4
Normal 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'
|
||||
}
|
||||
}
|
||||
}
|
16
likec4/models/containers/crossplane.c4
Normal 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'
|
||||
}
|
||||
}
|
||||
}
|
13
likec4/models/containers/externalsecrets.c4
Normal 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'
|
||||
}
|
||||
}
|
||||
}
|
45
likec4/models/containers/forgejo.c4
Normal file
|
@ -0,0 +1,45 @@
|
|||
model {
|
||||
|
||||
extend edp {
|
||||
container forgejo 'Forgejo' {
|
||||
description '
|
||||
Fully managed DevOps Platfrom
|
||||
offering capabilities like
|
||||
code version controling
|
||||
collaboration and ticketing
|
||||
and security scanning
|
||||
'
|
||||
technology 'Golang'
|
||||
icon tech:go
|
||||
|
||||
component forgejocollaboration 'Collaboration' {
|
||||
icon tech:github
|
||||
}
|
||||
|
||||
component forgejoproject 'Project Mgmt' {
|
||||
icon tech:github
|
||||
}
|
||||
|
||||
forgejoproject -> forgejoRunner 'executes pipelines'
|
||||
}
|
||||
|
||||
component forgejoRunner 'Forgejo Actions' {
|
||||
description 'Continuous Integration like Github Actions'
|
||||
technology 'Golang'
|
||||
icon tech:go
|
||||
style {
|
||||
multiple true
|
||||
}
|
||||
}
|
||||
|
||||
component imageregistry 'Forgejo OCI Image Registry' {
|
||||
description 'Container Image Registry'
|
||||
technology 'Golang'
|
||||
icon tech:go
|
||||
}
|
||||
|
||||
component forgejogit 'ForgejoGit' {
|
||||
icon tech:git
|
||||
}
|
||||
}
|
||||
}
|
9
likec4/models/containers/grafana.c4
Normal file
|
@ -0,0 +1,9 @@
|
|||
model {
|
||||
|
||||
extend edp {
|
||||
container grafana 'Grafana' {
|
||||
description 'Data visualization and monitoring'
|
||||
icon tech:grafana
|
||||
}
|
||||
}
|
||||
}
|
25
likec4/models/containers/ingress.c4
Normal 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 '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'
|
||||
}
|
||||
}
|
||||
}
|
21
likec4/models/containers/keycloak.c4
Normal 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'
|
||||
}
|
||||
}
|
||||
}
|
9
likec4/models/containers/kyverno.c4
Normal file
|
@ -0,0 +1,9 @@
|
|||
model {
|
||||
|
||||
extend edp {
|
||||
container kyverno 'Kyverno' {
|
||||
#internal
|
||||
description 'Policy-as-Code'
|
||||
}
|
||||
}
|
||||
}
|
13
likec4/models/containers/mailhog.c4
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
15
likec4/models/containers/minio.c4
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
30
likec4/models/containers/monitoring.c4
Normal 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'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
17
likec4/models/containers/openbao.c4
Normal 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'
|
||||
}
|
||||
}
|
||||
}
|
14
likec4/models/containers/spark-operator.c4
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
13
likec4/models/containers/velero.c4
Normal 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'
|
||||
}
|
||||
}
|
||||
}
|
35
likec4/models/context/actors.c4
Normal file
|
@ -0,0 +1,35 @@
|
|||
model {
|
||||
developer = actor 'Developer' {
|
||||
description 'The regular user of the platform'
|
||||
-> localbox 'inner loop development'
|
||||
-> edp 'outer loop development'
|
||||
-> edp.ui 'manages project'
|
||||
-> edp.forgejo 'manages code'
|
||||
-> edp.keycloak 'authenticates'
|
||||
-> edp.argoCD 'manages deployments'
|
||||
-> edp.grafana 'monitors'
|
||||
-> edp.backstage 'create and maintain apps'
|
||||
-> edp.imageregistry 'pushes and pull images'
|
||||
-> edp.api 'uses API'
|
||||
-> edp.forgejogit 'uses git'
|
||||
}
|
||||
platformdeveloper = actor 'Platform Developer' {
|
||||
description 'The EDP engineer'
|
||||
style {
|
||||
color gray
|
||||
shape person
|
||||
}
|
||||
}
|
||||
otherProductLifecycleRoles = actor 'Reviewer, Tester, Auditors, Operators' {
|
||||
description 'Coworking roles in the outer loop'
|
||||
-> edp 'act according to responibility'
|
||||
}
|
||||
customers = actor 'End Customers' {
|
||||
description 'Consumers of your Application'
|
||||
style {
|
||||
color amber
|
||||
shape person
|
||||
}
|
||||
-> cloud 'uses your app'
|
||||
}
|
||||
}
|
14
likec4/models/context/cloud.c4
Normal file
|
@ -0,0 +1,14 @@
|
|||
model {
|
||||
cloud = system 'Cloud' {
|
||||
description 'Cloud environments'
|
||||
technology 'IaaS/PaaS'
|
||||
|
||||
application = schema 'application' {
|
||||
description 'An application description'
|
||||
technology 'DSL'
|
||||
style {
|
||||
color primary
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
6
likec4/models/context/customer-systems.c4
Normal file
|
@ -0,0 +1,6 @@
|
|||
model {
|
||||
enterprise = system "Customers' Enterprise Systems" {
|
||||
description "The customers' enterprise systems"
|
||||
-> cloud 'app specific dependencies'
|
||||
}
|
||||
}
|
9
likec4/models/context/edfoundry.c4
Normal file
|
@ -0,0 +1,9 @@
|
|||
model {
|
||||
edf = system 'EDF' {
|
||||
description 'EDP Foundry, the EDP builder'
|
||||
technology 'Kubernetes'
|
||||
icon tech:kubernetes
|
||||
-> edp 'builds many'
|
||||
platformdeveloper -> edf "develops EDP and EDF"
|
||||
}
|
||||
}
|
31
likec4/models/context/edp.c4
Normal file
|
@ -0,0 +1,31 @@
|
|||
model {
|
||||
edp = system 'EDP' {
|
||||
description 'EDP Edge Development Platform'
|
||||
technology 'Kubernetes'
|
||||
icon tech:kubernetes
|
||||
-> enterprise 'integrates'
|
||||
-> cloud 'deploys and observes'
|
||||
-> localbox // inner-outer loop synchronization
|
||||
|
||||
application = schema 'application' {
|
||||
description 'An application description'
|
||||
technology 'DSL'
|
||||
style {
|
||||
color primary
|
||||
}
|
||||
}
|
||||
|
||||
container testApp 'Fibonacci' {
|
||||
description 'Testapp to validate deployments'
|
||||
|
||||
component fibonacci 'Fibonacci' {
|
||||
technology 'Golang'
|
||||
icon tech:go
|
||||
}
|
||||
}
|
||||
|
||||
// UI requests data from the Backend
|
||||
// ui -> backend 'fetches via HTTPS'
|
||||
}
|
||||
}
|
||||
|
22
likec4/models/context/localbox.c4
Normal file
|
@ -0,0 +1,22 @@
|
|||
model {
|
||||
localbox = system 'localbox' {
|
||||
description 'A local development system'
|
||||
technology 'Linux/Windows/Mac'
|
||||
-> edp 'inner-outer-loop synchronization'
|
||||
-> enterprise 'company integration'
|
||||
|
||||
application = schema 'application' {
|
||||
description 'An application description'
|
||||
technology 'DSL'
|
||||
style {
|
||||
color primary
|
||||
}
|
||||
}
|
||||
|
||||
git = component 'git' {
|
||||
description 'local git'
|
||||
technology 'Git'
|
||||
icon tech:git
|
||||
}
|
||||
}
|
||||
}
|
101
likec4/models/deployment/deployment.c4
Normal file
|
@ -0,0 +1,101 @@
|
|||
// Deployment model
|
||||
deployment {
|
||||
|
||||
environment local 'Local' {
|
||||
technology 'Kind'
|
||||
icon tech:kubernetes
|
||||
|
||||
namespace backstage {
|
||||
instanceOf edp.ui.backstage
|
||||
instanceOf edp.ui.database
|
||||
}
|
||||
|
||||
namespace argocd {
|
||||
instanceOf edp.argoCD.argocdAppController
|
||||
instanceOf edp.argoCD.argocdAppSetController
|
||||
instanceOf edp.argoCD.argocdRedis
|
||||
instanceOf edp.argoCD.argocdRepoServer
|
||||
instanceOf edp.argoCD.argocdServer
|
||||
}
|
||||
|
||||
namespace gitea {
|
||||
instanceOf edp.forgejo
|
||||
instanceOf edp.forgejoRunner
|
||||
}
|
||||
|
||||
namespace keycloak {
|
||||
instanceOf edp.keycloak.keycloak
|
||||
instanceOf edp.keycloak.keycloakDB
|
||||
}
|
||||
|
||||
namespace crossplane 'crossplane-system' {
|
||||
instanceOf edp.crossplane.crossplane
|
||||
instanceOf edp.crossplane.crossplaneFunction
|
||||
instanceOf edp.crossplane.crossplaneRbacManager
|
||||
instanceOf edp.crossplane.providerArgoCD
|
||||
instanceOf edp.crossplane.providerKind
|
||||
instanceOf edp.crossplane.providerShell
|
||||
}
|
||||
|
||||
namespace externalSecrets 'external-secrets' {
|
||||
instanceOf edp.externalSecrets.certController
|
||||
instanceOf edp.externalSecrets.externalSecrets
|
||||
instanceOf edp.externalSecrets.webhook
|
||||
}
|
||||
|
||||
namespace velero {
|
||||
instanceOf edp.velero.velero
|
||||
}
|
||||
|
||||
namespace minio 'minio-backup' {
|
||||
instanceOf edp.minio.minio
|
||||
}
|
||||
|
||||
namespace monitoring {
|
||||
instanceOf edp.monitoring.alloy
|
||||
instanceOf edp.monitoring.distributor
|
||||
instanceOf edp.monitoring.gateway
|
||||
instanceOf edp.monitoring.ingestor
|
||||
instanceOf edp.monitoring.querier
|
||||
instanceOf edp.monitoring.queryFrontend
|
||||
}
|
||||
|
||||
namespace ingressNginx 'ingress-nginx'{
|
||||
instanceOf edp.ingressNginx.ingressNginx
|
||||
}
|
||||
|
||||
namespace openbao 'openbao' {
|
||||
instanceOf edp.openbao.openbao
|
||||
instanceOf edp.openbao.agentInjector
|
||||
}
|
||||
|
||||
namespace fibonacci 'fibonacci-app' {
|
||||
instanceOf edp.testApp.fibonacci
|
||||
}
|
||||
|
||||
namespace mailhog 'mailhog' {
|
||||
instanceOf edp.mailhog.mailhog
|
||||
}
|
||||
|
||||
namespace spark 'spark' {
|
||||
instanceOf edp.spark.sparkoperator
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
views {
|
||||
deployment view index {
|
||||
title 'Local Deployment'
|
||||
|
||||
include
|
||||
*,
|
||||
local.**,
|
||||
monitoring.*,
|
||||
openbao.*,
|
||||
externalSecrets.*,
|
||||
crossplane.*,
|
||||
spark.*,
|
||||
argocd.*
|
||||
}
|
||||
}
|
||||
|
31
likec4/models/spec.c4
Normal file
|
@ -0,0 +1,31 @@
|
|||
specification {
|
||||
element actor {
|
||||
style {
|
||||
shape person
|
||||
color green
|
||||
}
|
||||
}
|
||||
element component
|
||||
element container {
|
||||
style {
|
||||
opacity 20%
|
||||
}
|
||||
}
|
||||
element internalComponent {
|
||||
style {
|
||||
color muted
|
||||
opacity 15%
|
||||
}
|
||||
}
|
||||
|
||||
element schema
|
||||
element step
|
||||
element system
|
||||
element workflow
|
||||
|
||||
deploymentNode node
|
||||
deploymentNode environment
|
||||
deploymentNode namespace
|
||||
|
||||
tag internal
|
||||
}
|
35
likec4/views/application-transition.c4
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
41
likec4/views/developer-landscape-with-foundry.c4
Normal file
|
@ -0,0 +1,41 @@
|
|||
|
||||
global {
|
||||
style text_large * {
|
||||
size xlarge
|
||||
}
|
||||
}
|
||||
views {
|
||||
|
||||
view developer-landscape-with-foundry {
|
||||
title 'Developer Landscape View (with Foundry)'
|
||||
autoLayout LeftRight 100 100
|
||||
|
||||
global style text_large
|
||||
|
||||
include *
|
||||
exclude developer, localbox, edp, otherProductLifecycleRoles
|
||||
exclude element.kind = workflow
|
||||
|
||||
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
|
||||
}
|
||||
group 'Devops outer-loop' {
|
||||
color gray
|
||||
opacity 30%
|
||||
border none
|
||||
include edp
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
33
likec4/views/developer-landscape.c4
Normal file
|
@ -0,0 +1,33 @@
|
|||
views {
|
||||
|
||||
view landscape {
|
||||
title 'Developer Landscape View'
|
||||
autoLayout LeftRight 100 100
|
||||
|
||||
include *
|
||||
exclude developer, localbox, edp, otherProductLifecycleRoles
|
||||
exclude element.kind = workflow
|
||||
|
||||
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
|
||||
}
|
||||
group 'Devops outer-loop' {
|
||||
color gray
|
||||
opacity 30%
|
||||
border none
|
||||
include edp
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
44
likec4/views/edp-as-idp.c4
Normal file
|
@ -0,0 +1,44 @@
|
|||
views {
|
||||
/**
|
||||
* @likec4-generated(v1)
|
||||
* iKRoYXNo2ShjOTFkNTk3Y2QyNjFmM2Y1ZjdhOGVjNDAyOTFjM2FiODI4NTg3NTc5qmF1dG9MYXlvdXSBqWRpcmVjdGlvbqJUQqF40fzwoXnR/iqld2lkdGjNGkWmaGVpZ2h0zQjmpW5vZGVz3gAWqWRldmVsb3BlcoKhYpTR/PDR/tPNAgjNASKhY8KkQGdyMYKhYpQd0f4uzQlszQjioWPDpEBncjKCoWKURdH+Zc0JHM0DhaFjw6RAZ3I1gqFilHLNAhbNCNvNAYehY8OkQGdyNoKhYpR3zQO+zQjUzQGJoWPDpEBncjeCoWKUdM0FYc0I2s0Bh6Fjw6RAZ3IzgqFilG7R/pzNCMfNAYWhY8OkQGdyNIKhYpRtNs0IzM0BjKFjw7FlZHAuZm9yZ2Vqb1J1bm5lcoKhYpTMmM0CTM0CCM0BIqFjwrFlZHAuaW1hZ2VyZWdpc3RyeYKhYpTNA8XNAlPNAgrNASKhY8KqZWRwLmFyZ29D
|
||||
* RIKhYpTNBx3NAlDNAgjNASKhY8KuZWRwLm1vbml0b3JpbmeCoWKUzQcbzQP9zQIIzQEioWPCq2VkcC5ncmFmYW5hgqFilMydzQP1zQIIzQEioWPCrGVkcC5rZXljbG9ha4KhYpTMnM0Fns0CCM0BIqFjwqtlZHAua3l2ZXJub4KhYpTNBPPNBZnNAgjNASKhY8KzZWRwLmV4dGVybmFsU2VjcmV0c4KhYpTNBx7NBZjNAgjNASKhY8KrZWRwLm9wZW5iYW+CoWKUzQLHzQWdzQIIzQEioWPCsGVkcC51aS5iYWNrc3RhZ2WCoWKUzJbR/tPNAgjNASKhY8KnZWRwLmFwaYKhYpTNBwTR/tfNAgjNASKhY8LZLGFwcGxpY2F0aW9uc3BlY2lmaWNhdGlvbi5hcHBsaWNhdGlvbl9naXRyZXBvgqFilM0DvnfNAgjNASKhY8LZMGFwcGxpY2F0aW9uc3BlY2lmaWNhdGlvbi5hcHBsaWNh
|
||||
* dGlvbnNwZWNfZ2l0cmVwb4KhYpTNBwl3zQIIzQEioWPCrmVkcC5mb3JnZWpvZ2l0gqFilMyVbc0CCM0BIqFjwqVlZGdlc4anMXc5Y3BiMoOiY3CRgqF4y8BheZmZmZmaoXnR/2ShbISheNDHoXnR/2Sld2lkdGjMoaZoZWlnaHQSoXCaks0XAs0BfJLNFaPNAbOSzRMdzQIRks0Q8s0CNJLNENHNAjeSzQfUzQIzks0Htc0CPJLNB4vNAkmSzQdgzQJdks0HOs0CdacxeTNsY3lqg6JjcJGCoXjNBI2hedH+KqFshKF4zQMHoXnR/kald2lkdGg8pmhlaWdodBKhcJqSzRcCzQGNks0WAc0BxZLNFGzNAhSSzRMIzQI0ks0S6c0CN5LNCm/NAjSSzQpRzQI8ks0KIs0CSZLNCfTNAl6SzQnIzQJ1pzFhZ3ZlbjmDomNwkYKheMvAYa6Y5gyf6qF5y0BTTMzMzMzNoWyEoXjQt6F5Z6V3
|
||||
* aWR0aDSmaGVpZ2h0EqFwmpLNFwLNAXGSzRU+zQGlks0Res0CDpLNDknNAjSSzQ4pzQI2ks0FUs0CM5LNBTPNAjySzQUJzQJJks0E380CXZLNBLnNAnSnMW52MHc0MYOiY3CRgqF40f9BoXnNAQ+hbISheMzNoXnNAbeld2lkdGjMl6ZoZWlnaHQSoXCaks0XAs0BtpLNFnjNAeeSzRXJzQIcks0VKM0CNJLNFP/NAjuSzQ97zQIwks0PU80CPJLNDynNAkmSzQ7/zQJdks0O2M0CdKYzbnhycTeDomNwkYKhePWhec0DmKFshKF40f8roXnNAimld2lkdGg6pmhlaWdodBKhcJqSzRcCzQGfks0WQM0B1ZLNFS7NAhiSzRQ5zQI0ks0UBc0CO5LNDQPNAi2SzQzRzQI8ks0Mp80CSZLNDH3NAl2SzQxXzQJ0pmJmZ2FwcYOiY3CRgqF40LWhec0FEKFshKF40f7voXnNAxWld2lkdGhX
|
||||
* pmhlaWdodBKhcJSSzRc1zQHhks0W8c0CEJLNFqXNAkWSzRZgzQJ0
|
||||
*/
|
||||
view idp of edp {
|
||||
title 'EDP as IDP'
|
||||
|
||||
global style text_large
|
||||
|
||||
include developer
|
||||
exclude element.tag = #internal
|
||||
|
||||
style * {
|
||||
opacity 25%
|
||||
}
|
||||
group 'EDP' {
|
||||
group 'Developer Control Plane' {
|
||||
group 'Frontend' {
|
||||
include backstage, api
|
||||
}
|
||||
group 'Version Control' {
|
||||
include applicationspecification.application_gitrepo, applicationspecification.applicationspec_gitrepo
|
||||
include forgejogit
|
||||
}
|
||||
}
|
||||
group 'Integration & Delivery Plane' {
|
||||
include forgejoRunner, imageregistry, argoCD
|
||||
exclude -> argoCD ->
|
||||
}
|
||||
group 'Monitoring Plane' {
|
||||
include monitoring, grafana
|
||||
}
|
||||
group 'Security Plane' {
|
||||
include keycloak, kyverno, externalSecrets, openbao
|
||||
}
|
||||
}
|
||||
autoLayout TopBottom
|
||||
}
|
||||
}
|
42
likec4/views/edp-as-orchestrator.c4
Normal file
|
@ -0,0 +1,42 @@
|
|||
views {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @likec4-generated(v1)
|
||||
* iKRoYXNo2ShiMmZlZGEwNzE3MDU5ZjQ0Nzg2YzFhYjJiNTI0NmRjZmRlOWNhYjdlqmF1dG9MYXlvdXSBqWRpcmVjdGlvbqJUQqF40f8UoXkOpXdpZHRozQU6pmhlaWdodM0D7aVub2Rlc4ikQGdyMYKhYpTR/xQOzQU6zQPtoWPDpEBncjKCoWKUMEXNAUDMtKFjw6RAZ3IzgqFilM0B3kXNAUDMtKFjw6RAZ3I0gqFilDDNAXHNAUDMtKFjw6RAZ3I1gqFilM0B3s0Bcc0BQMy0oWPDpEBncjaCoWKU0f88zQJSzQTqzQGBoWPDqmVkcC5hcmdvQ0SCoWKU0f9kzQKJzQIIzQEioWPCrmVkcC5jcm9zc3BsYW5lgqFilM0B+M0Cis0CCM0BIqFjwqVlZGdlc4A=
|
||||
*/
|
||||
view edporchestrator of edp {
|
||||
title 'EDP as Orchestrator'
|
||||
|
||||
global style text_large
|
||||
|
||||
exclude element.tag = #internal
|
||||
|
||||
style * {
|
||||
opacity 25%
|
||||
}
|
||||
group 'EDP' {
|
||||
group 'Developer Control Plane' {
|
||||
|
||||
}
|
||||
group 'Integration & Delivery Plane' {
|
||||
|
||||
}
|
||||
group 'Monitoring Plane' {
|
||||
|
||||
}
|
||||
group 'Security Plane' {
|
||||
|
||||
}
|
||||
group 'Backend' {
|
||||
include argoCD with {
|
||||
description 'Declarative management of platform tools'
|
||||
}
|
||||
include crossplane
|
||||
|
||||
}
|
||||
}
|
||||
autoLayout TopBottom
|
||||
}
|
||||
}
|
86
likec4/views/edp.c4
Normal file
|
@ -0,0 +1,86 @@
|
|||
views {
|
||||
|
||||
view edp of edp {
|
||||
title 'Context view'
|
||||
include *
|
||||
exclude ingressNginx ->
|
||||
exclude element.tag = #internal
|
||||
|
||||
style * {
|
||||
opacity 25%
|
||||
}
|
||||
}
|
||||
|
||||
view keycloak of edp.keycloak {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
|
||||
view forgejo of edp.forgejo {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
|
||||
view crossplane of edp.crossplane {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
|
||||
view externalSecrets of edp.externalSecrets {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
|
||||
view velero of edp.velero {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
|
||||
view minio of edp.minio {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
|
||||
view monitoring of edp.monitoring {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
loki.*
|
||||
}
|
||||
|
||||
view ingressNginx of edp.ingressNginx {
|
||||
include *
|
||||
}
|
||||
|
||||
view testapp of edp.testApp {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
|
||||
view mailhog of edp.mailhog {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
|
||||
view spark of edp.spark {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
|
||||
view argoCD of edp.argoCD {
|
||||
include
|
||||
*,
|
||||
edp.ingressNginx ->
|
||||
}
|
||||
}
|
||||
|
||||
|
26
likec4/views/gitops-inner-outer-loop.c4
Normal file
|
@ -0,0 +1,26 @@
|
|||
views {
|
||||
dynamic view view_gitops-inner-outer-loop_15 {
|
||||
title 'outer-ci-loop'
|
||||
|
||||
include localbox, edp
|
||||
include edp.forgejo with {
|
||||
color gray
|
||||
title 'Forgejo'
|
||||
}
|
||||
|
||||
style edp._ {
|
||||
color secondary
|
||||
}
|
||||
|
||||
localbox.git -> edp.forgejogit 'git push'
|
||||
edp.forgejogit -> edp.forgejoRunner 'on push'
|
||||
|
||||
edp.forgejoRunner -> edp.imageregistry 'pushes new image'
|
||||
edp.forgejoRunner -> edp.forgejogit 'pushes new appspec'
|
||||
|
||||
edp.forgejogit -> edp.argoCD 'triggers deployment'
|
||||
edp.argoCD -> cloud 'deploys application'
|
||||
cloud -> edp.imageregistry 'pulls image'
|
||||
}
|
||||
|
||||
}
|