diff --git a/content/en/blog/20250401_review.md b/content/en/blog/20250401_review.md deleted file mode 100644 index a5a339d..0000000 --- a/content/en/blog/20250401_review.md +++ /dev/null @@ -1,84 +0,0 @@ -# Review - -1) 09h35 Marco -business plan -issue: value of software, depreciation -FTE: around 100 overall, 3 full teams of developers -tax discussion - -10h04 Discussions - -2) 10h10 Julius - -3) 10h27 Sebastiano - DevDay bis 10h40 - -schriften bei votes größer - fragen sollten lesbar sein! - -devops is dead .... claim - - -4) Stephan bis 10h55 - -5) christopher 10h58 - -6) robert 11:11 -* app -* devops-pipelines -* edp in osc deployed - -7) michal has nothing to show - -8) evgenii wants to finish -- 11:30 - -9) patrick 11:32 - - -==== - -projekt management meeting - -workshops, externe teams - -customer episodes - -wem was wo prinzipien -| -Rollen, Personas - -weiter die perspektive des nutzers bekommen, inneres verlangen eines developers, mein anspruch an das EDP -(bekommen wir das hin, möchte ic damit arbeiten) - -level 2 erklimmen - -workshops halten - -senioren bekommen - - -level1: source code structure, artefakte builden, revision control, branching model, e.g. pull requesting, tests der software, local debugging -level2: automatisierung des artefakte-builds, versionsmgmt, milestones, tickets, issues, compliances an security -level3: deployment auf stages, feedback pipeline verhalten -level4: feedback app-verhalten (logs, metrics, alerts) + development loop -level5: 3rd level support in production - -level1: coding -source code structure, artefakte builden, revision control, branching model, e.g. pull requesting, tests der software, local debugging - -level2: reaching the outdside world with output -automatisierung des artefakte-builds, versionsmgmt, milestones, tickets, issues, compliances an security - -level3: run the app anywhere -deployment auf stages, feedback pipeline verhalten - -level4: monitoring the app -feedback app-verhalten (logs, metrics, alerts) + development loop - -level5: support -3rd level support in production (or any outer stage) - - -sprint 4 -leveraging säule -eigene app säule -chore säule - diff --git a/content/en/blog/20251027_important_links.md b/content/en/blog/20251027_important_links.md deleted file mode 100644 index b84ce95..0000000 --- a/content/en/blog/20251027_important_links.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: important links -weight: 20 ---- - -* Gardener login to Edge and orca cluster: IPCEICIS-6222 \ No newline at end of file diff --git a/content/en/blog/240823-archsession.md b/content/en/blog/240823-archsession.md deleted file mode 100644 index 17ac41c..0000000 --- a/content/en/blog/240823-archsession.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Architecture session -weight: 20 ---- - - -## Platform Generics - -* https://tag-app-delivery.cncf.io/whitepapers/platforms/#capabilities-of-platforms - -* https://tag-app-delivery.cncf.io/whitepapers/platform-eng-maturity-model/ - -* https://humanitec.com/blog/wtf-internal-developer-platform-vs-internal-developer-portal-vs-paas - -## reference architecture + Portfolio - -* https://platformengineering.org/blog/create-your-own-platform-engineering-reference-architectures - -* https://humanitec.com/reference-architectures - -* https://www.youtube.com/watch?v=AimSwK8Mw-U - - -## Platform Portfolio - -### Viktor Farcic - -* https://technologyconversations.com/ - -* https://technologyconversations.com/2024/01/08/the-best-devops-tools-platforms-and-services-in-2024/ - - -### Internal devloper platform - -* https://internaldeveloperplatform.org/core-components/ - -### Workflow / CI/CD - -* https://cnoe.io/blog/optimizing-data-quality-in-dev-portals - diff --git a/content/en/docs/edgeconnect/_index.md b/content/en/docs/edgeconnect/_index.md index 97cc64c..4c419d3 100644 --- a/content/en/docs/edgeconnect/_index.md +++ b/content/en/docs/edgeconnect/_index.md @@ -10,7 +10,7 @@ description: > EdgeConnect is a custom cloud provided by the project as a whole. It has several goals, including retaining sovereign control over cloud compute resources, and supporting sustainability-aware infrastructure choices. -While EdgeConnect is managed outwith our Edge Developer Platform, we have produced a number of tools to facilitate its use and broaden its applicability. These are an [SDK](/docs/components/deployments/edgeconnect/edgeconnect-sdk/), command-line [client](/docs/components/deployments/edgeconnect/edgeconnect-client/), bespoke [provider](/docs/components/orchestration/infrastructure/provider/) for [Terraform](https://developer.hashicorp.com/terraform), and tailor-made [Forgejo Actions](/docs/edgeconnect/edgeconnect-actions/). +While EdgeConnect is managed outwith our Edge Developer Platform, we have produced a number of tools to facilitate its use and broaden its applicability. These are an [SDK](/docs/edgeconnect/edgeconnect-sdk/), command-line [client](/docs/edgeconnect/edgeconnect-client/), bespoke [provider](/docs/edgeconnect/terraform-provider/) for [Terraform](https://developer.hashicorp.com/terraform), and tailor-made [Forgejo Actions](/docs/edgeconnect/edgeconnect-actions/). {{< likec4-view view="edgeconnect-context" project="architecture" title="EdgeConnect Context View: Users, Tooling and Control Plane" >}} @@ -24,8 +24,8 @@ EDP appears here as an external consumer: it can automate provisioning and deplo * Managed by the broader project, not specifically by EDP * Focus on sovereignty and sustainability -* Utilities such as [CLI](/docs/components/deployments/edgeconnect/edgeconnect-client/) and [Terraform provider](/docs/components/orchestration/infrastructure/provider/) encourage widespread platform use -* [EDP](/docs/edp/) products such as [Forgejo](/docs/components/forgejo/) are hosted on [OTC](/docs/components/deployments/otc/) rather than EdgeConnect +* Utilities such as [CLI](/docs/edgeconnect/edgeconnect-client/) and [Terraform provider](/docs/edgeconnect/terraform-provider/) encourage widespread platform use +* [EDP](/docs/edp/) products such as [Forgejo](/docs/edp/forgejo/) are hosted on [OTC](/docs/edp/deployment/otc/) rather than EdgeConnect ## Purpose in EDP diff --git a/content/en/docs/edgeconnect/edgeconnect-client.md b/content/en/docs/edgeconnect/edgeconnect-client.md index 1e254ea..5e1aeb1 100644 --- a/content/en/docs/edgeconnect/edgeconnect-client.md +++ b/content/en/docs/edgeconnect/edgeconnect-client.md @@ -8,7 +8,7 @@ description: > ## Overview -The EdgeConnect Client is a command-line tool for managing EdgeConnect applications and instances. It is built using our Golang [SDK](/docs/components/deployments/edgeconnect/edgeconnect-sdk/), and supports functionality to create, destroy, describe and list various resources. +The EdgeConnect Client is a command-line tool for managing EdgeConnect applications and instances. It is built using our Golang [SDK](/docs/edgeconnect/edgeconnect-sdk/), and supports functionality to create, destroy, describe and list various resources. The tool provides both imperative commands (for direct resource management) and declarative workflows (using YAML configuration files) to deploy applications across multiple edge cloudlets. It supports different EdgeConnect deployment environments through an API version selector. @@ -240,7 +240,7 @@ spec: ## Additional Resources -* [EdgeConnect SDK Documentation](/docs/components/deployments/edgeconnect/edgeconnect-sdk/) +* [EdgeConnect SDK Documentation](/docs/edgeconnect/edgeconnect-sdk/) * **Edge Cloud**: [Console](https://hub.apps.edge.platform.mg3.mdb.osc.live/) | [API Docs](https://swagger.edge.platform.mg3.mdb.osc.live/) * **Orca Cloud**: [Console](https://hub.apps.orca.platform.mg3.mdb.osc.live/) | [API Docs](https://swagger.orca.platform.mg3.mdb.osc.live/) * [Source Code Repository](https://edp.buildth.ing/DevFW-CICD/edge-connect-client) diff --git a/content/en/docs/edgeconnect/edgeconnect-sdk.md b/content/en/docs/edgeconnect/edgeconnect-sdk.md index 013eec1..7b8046b 100644 --- a/content/en/docs/edgeconnect/edgeconnect-sdk.md +++ b/content/en/docs/edgeconnect/edgeconnect-sdk.md @@ -8,7 +8,7 @@ description: > ## Overview -The EdgeConnect SDK is a Go library which provides a simple method for interacting with Edge Connect within programs. It is designed to be used by other tools, such as the [EdgeConnect Client](/docs/components/deployments/edgeconnect/edgeconnect-client/) or [Terraform provider](/docs/components/orchestration/infrastructure/provider/), +The EdgeConnect SDK is a Go library which provides a simple method for interacting with Edge Connect within programs. It is designed to be used by other tools, such as the [EdgeConnect Client](/docs/edgeconnect/edgeconnect-client/) or [Terraform provider](/docs/edgeconnect/terraform-provider/), ## Key Features @@ -18,7 +18,7 @@ The EdgeConnect SDK is a Go library which provides a simple method for interacti ## Purpose in EDP -No system can be considered useful unless it is actually, in practice, used. While the Edge Connect [console](https://hub.apps.edge.platform.mg3.mdb.osc.live/) and [API](https://swagger.edge.platform.mg3.mdb.osc.live/) are essential tools to allow the platform to be used by developers, there are numerous use cases for interaction that is automated but simpler to use than an API. These include a [command-line tool](/docs/components/deployments/edgeconnect/edgeconnect-client/) and [Terraform provider](/docs/components/orchestration/infrastructure/provider/). +No system can be considered useful unless it is actually, in practice, used. While the Edge Connect [console](https://hub.apps.edge.platform.mg3.mdb.osc.live/) and [API](https://swagger.edge.platform.mg3.mdb.osc.live/) are essential tools to allow the platform to be used by developers, there are numerous use cases for interaction that is automated but simpler to use than an API. These include a [command-line tool](/docs/edgeconnect/edgeconnect-client/) and [Terraform provider](/docs/edgeconnect/terraform-provider/). While each such tool could simply independently wrap existing endpoints, this is generally too low-level for sustainable development. It would involve extensive boilerplate code in each such package, plus small changes to API endpoints or error handling may require constant rework. @@ -51,7 +51,7 @@ To avoid this, the Edge Connect SDK aims to provide a common library for interac ## Usage Examples -See [README](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/sdk#examples) for simple code examples, or repositories for [EdgeConnect Client](/docs/components/deployments/edgeconnect/edgeconnect-client/) and [Terraform provider](/docs/components/orchestration/infrastructure/provider/) for full projects relying on it. +See [README](https://edp.buildth.ing/DevFW-CICD/edge-connect-client/src/branch/main/sdk#examples) for simple code examples, or repositories for [EdgeConnect Client](/docs/edgeconnect/edgeconnect-client/) and [Terraform provider](/docs/edgeconnect/terraform-provider/) for full projects relying on it. ## Troubleshooting diff --git a/content/en/docs/edgeconnect/terraform-provider.md b/content/en/docs/edgeconnect/terraform-provider.md index b6bc371..5dbbd4c 100644 --- a/content/en/docs/edgeconnect/terraform-provider.md +++ b/content/en/docs/edgeconnect/terraform-provider.md @@ -22,7 +22,7 @@ Interacting with infrastructure is a complex process, with many parameters and c Instead, automations are possible through APIs and SDKs. Working directly with an API (e.g. via `curl`) inevitably tends to involve large amounts of boilerplate code to manage authentication, rarely-changing configuration such as region/tenant selection, and more. When one resource (say, a web server) must interact with another (say, a DNS record), the cross-references further increase this complexity. -An SDK mitigates this complexity when coding software, by providing library functions which interact with the API in abstracted ways which require a minimum of necessary information. Our SDK for Edge Connect is described in a [separate section](/docs/components/deployments/edgeconnect/edgeconnect-sdk/). +An SDK mitigates this complexity when coding software, by providing library functions which interact with the API in abstracted ways which require a minimum of necessary information. Our SDK for Edge Connect is described in a [separate section](/docs/edgeconnect/edgeconnect-sdk/). However, when simply wanting to deploy infrastructure in isolation - say, updating the status of a Kubernetes or App resource after a change in configuration - an SDK is still an overly complicated tool. diff --git a/content/en/docs/edp/deployment/infrastructure/stacks/_index.md b/content/en/docs/edp/deployment/infrastructure/stacks/_index.md index a7a9dcb..d4b44fb 100644 --- a/content/en/docs/edp/deployment/infrastructure/stacks/_index.md +++ b/content/en/docs/edp/deployment/infrastructure/stacks/_index.md @@ -6,17 +6,6 @@ description: > Platform-level component provisioning via Stacks --- -{{% alert title="Draft" color="" %}} -**Editorial Status**: This page is currently being developed. - -* **Jira Ticket**: [TICKET-6729](https://jira.telekom-mms.com/browse/IPCEICIS-6729) -* **Assignee**: Stephan -* **Status**: Waiting for Review -* **Last Updated**: 2025-11-30 -* **TODO**: - * [ ] Review and finalize content -{{% /alert %}} - ## Overview The `stacks` and `stacks-instances` repositories form the core of a GitOps-based system for provisioning Edge Developer Platforms (EDP). They implement a template-instance pattern that enables the deployment of reusable platform components across different environments. The concept of "stacks" originates from the CNOE.io project (Cloud Native Operational Excellence), which can be traced through the evolutionary development from `edpbuilder` (derived from CNOE.io's `EDPbuilder`) to `infra-deploy`. @@ -117,7 +106,7 @@ A 'stack' is the declarative description for the platform provisionning in an ED ## Repository -**Code**: +**Code**: * [Stacks Templates Repo](https://edp.buildth.ing/DevFW-CICD/stacks) * [Stacks Instances Repo, used for ArgoCD Gitops](https://edp.buildth.ing/DevFW-CICD/stacks-instances) * [EDP Stacks Deployment mechanism](https://edp.buildth.ing/DevFW/infra-deploy) @@ -262,7 +251,7 @@ Terragrunt Stacks provision: The script `scripts/edp-install.sh` executes the following steps: -1. **Template Hydration**: +1. **Template Hydration**: - Checkout of the `stacks` repository - Execution of Gomplate to resolve template variables - Generation of environment-specific manifests @@ -508,7 +497,7 @@ So imagine, you want to to the stacks 'core,observability' on your local machine kind delete clusters --all ./scripts/ensure-kind-cluster.sh -r -# provide some emnv vars +# provide some emnv vars export TERRAFORM=/bin/bash export LOADBALANCER_ID=ABC export DOMAIN=ABC diff --git a/content/en/docs/edp/forgejo/actions/_index.md b/content/en/docs/edp/forgejo/actions/_index.md index 6faf101..7dbf9ed 100644 --- a/content/en/docs/edp/forgejo/actions/_index.md +++ b/content/en/docs/edp/forgejo/actions/_index.md @@ -5,11 +5,9 @@ weight: 10 description: GitHub Actions-compatible CI/CD automation --- - - ## Overview -Forgejo Actions is a built-in CI/CD automation system that enables developers to define and execute workflows directly within their Forgejo repositories. As a continuous integration and continuous deployment platform, Forgejo Actions automates software development tasks such as building, testing, packaging, and deploying applications whenever specific events occur in your repository. +[Forgejo Actions](https://forgejo.org/docs/next/user/actions/reference/) is a built-in CI/CD automation system that enables developers to define and execute workflows directly within their Forgejo repositories. As a continuous integration and continuous deployment platform, Forgejo Actions automates software development tasks such as building, testing, packaging, and deploying applications whenever specific events occur in your repository. Forgejo Actions provides [GitHub Actions similarity](https://forgejo.org/docs/latest/user/actions/github-actions/), allowing teams to easily adapt existing GitHub Actions workflows and marketplace actions with minimal or no modifications. This compatibility significantly reduces migration effort for teams transitioning from GitHub to Forgejo, while maintaining familiar syntax and workflow patterns. @@ -35,7 +33,7 @@ Since Forgejo Actions is natively integrated into Forgejo, EDP provides this cri ### Prerequisites * Installed Forgejo -* Installed Forgejo runner (see [Runner Installation Quick Start](/docs/components/forgejo/actions/runner/#quick-start)) +* Installed Forgejo runner (see [Runner Installation Quick Start](/docs/edp/forgejo/actions/runners/#quick-start)) ### Quick Start @@ -125,10 +123,10 @@ jobs: ## Status -**Maturity**: [Production / Beta / Experimental] +**Maturity**: Production ## Additional Resources -* [Link to external documentation] -* [Link to community resources] -* [Link to related components] +* [Forgejo Actions](https://forgejo.org/docs/next/user/actions/reference/) +* [GitHub Actions](https://github.com/features/actions) +* [GitHub Actions similarity](https://forgejo.org/docs/latest/user/actions/github-actions/) diff --git a/content/en/docs/edp/forgejo/actions/runners/_index.md b/content/en/docs/edp/forgejo/actions/runners/_index.md index c66f4c2..f54a8e4 100644 --- a/content/en/docs/edp/forgejo/actions/runners/_index.md +++ b/content/en/docs/edp/forgejo/actions/runners/_index.md @@ -18,9 +18,9 @@ This document explores different runner architectures, examining their security ## Key Features -* [Feature 1] -* [Feature 2] -* [Feature 3] +* Consistent environment for Forgejo Actions +* Primary location to execute code e.g. deployments +* Good [security practices](/docs/edp/forgejo/actions/runners/garm/) essential due to broad remit ## Purpose in EDP @@ -155,11 +155,11 @@ Alternatives to `docker` are [`lxc`](https://forgejo.org/docs/latest/admin/actio ## Troubleshooting -### In containerized environments, i want to build container images +### In containerized environments, I want to build container images **Problem**: In containerized environment, containers usually do not have many privileges. To start or build containers additional privleges, usually root is required inside of the kernel, the container runtime needs to manage linux namespaces and cgroups. -**Solution**: A partial solution for this is `buildkitd` utilizing `rootlesskit`. This allows containers to be **built** in a non root environment. You can find examples here: [Examples](https://github.com/moby/buildkit/tree/master/examples/kubernetes). +**Solution**: A partial solution for this is `buildkitd` utilizing `rootlesskit`. This allows containers to be **built** (but not run) in a non root environment. Several examples can be found in the [official buildkit repo](https://github.com/moby/buildkit/tree/master/examples/kubernetes). ***Rootless vs User namespaces:*** @@ -169,14 +169,10 @@ Rootless is considered the more secure version, as the executable is mapped to a ## Status -**Maturity**: [Production / Beta / Experimental] +**Maturity**: Beta ## Additional Resources * [Forgejo Runner installation guide](https://forgejo.org/docs/latest/admin/actions/runner-installation) * [Static Runners on Kubernetes](https://edp.buildth.ing/DevFW-CICD/stacks/src/branch/main/template/stacks/forgejo/forgejo-runner/dind-docker.yaml) * [Runner Orchestartion using GARM on Edge Connect](../runner-orchestration) - -## Documentation Notes - -[Instructions for team members filling in this documentation - remove this section once complete] diff --git a/content/en/docs/edp/forgejo/actions/runners/garm.md b/content/en/docs/edp/forgejo/actions/runners/garm.md index 1c0c1b5..75e1896 100644 --- a/content/en/docs/edp/forgejo/actions/runners/garm.md +++ b/content/en/docs/edp/forgejo/actions/runners/garm.md @@ -29,8 +29,6 @@ A custom edge-connect provider was implemented for GARM to enable infrastructure - [GARM deploy script](https://edp.buildth.ing/DevFW/infra-deploy/src/branch/main/scripts/local-helm.sh) - [GARM deploy manifests](https://edp.buildth.ing/DevFW/garm-deploy.git) -**Documentation**: [Link to component-specific documentation] - ## Getting Started ### Prerequisites @@ -95,22 +93,6 @@ The diagram below shows how a trigger of an action results in deployment of a ru {{}} -[Add infrastructure and deployment diagrams showing how the component is deployed] - -TODO c4 - -- Garm Container in OTC Kubernetes -- Garm-Provider in Garm Container -- Garm in Garm container -- EDP in OTC Kubernetes -- Forgejo Runner in Edge Connect -- EDP --notifies with webhook--> Garm -- Garm --calls--> EDP -- Garm --calls--> garm provider -- garm provider --provisions instance--> Forgejo runner -- Forgejo runner --retrieves bootstrap information-->Garm -- Forgejo runner --picks up job--> EDP - ## Configuration ### Provider Setup @@ -184,28 +166,11 @@ garm-cli gitea credentials add \ Now, connect to the WebUI, use `GARM_ADMIN_USERNAME` and `GARM_ADMIN_PASSWORD` as credentials to authenticate. Click on repositories and -## Troubleshooting - -### [Common Issue 1] - -**Problem**: [Description] - -**Solution**: [How to fix] - -### [Common Issue 2] - -**Problem**: [Description] - -**Solution**: [How to fix] - ## Status -**Maturity**: [Production / Beta / Experimental] +**Maturity**: Beta ## Additional Resources -* [Using GARM](https://github.com/cloudbase/garm/blob/main/doc/using_garm.md) - -## Documentation Notes - -[Instructions for team members filling in this documentation - remove this section once complete] +* [GARM repository](https://github.com/cloudbase/garm) + * [How to use](https://github.com/cloudbase/garm/blob/main/doc/using_garm.md) diff --git a/content/en/docs/edp/forgejo/project-mgmt.md b/content/en/docs/edp/forgejo/project-mgmt.md index 702bd66..01fb113 100644 --- a/content/en/docs/edp/forgejo/project-mgmt.md +++ b/content/en/docs/edp/forgejo/project-mgmt.md @@ -1,9 +1,9 @@ --- -title: "Project Management" -linkTitle: "Forgejo Project Mgmt" +title: Project Management in Forgejo +linkTitle: Project Management weight: 50 description: > - Organization-level project and issue management (discontinued feature) + Organization-level project and issue management --- {{% alert title="Discontinued Feature" color="warning" %}} diff --git a/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 b/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 index 2840775..61150bc 100644 --- a/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 +++ b/resources/edp-likec4/views/dynamic/cicd/garm-arch.c4 @@ -19,12 +19,15 @@ deployment { description 'GARM container with runner orchestration' } - garmService = instanceOf edp.garm.garm { - description 'GARM - Runner lifecycle manager' - } + environment edpCluster 'GARM pod' { + technology 'Kubernetes' + garmService = instanceOf edp.garm.garm { + description 'GARM - Runner lifecycle manager' + } - instanceOf edp.garm.providerEdgeConnect { - description 'GARM Provider for Edge Connect' + instanceOf edp.garm.providerEdgeConnect { + description 'GARM Provider for Edge Connect' + } } } } diff --git a/static/js/likec4-webcomponent.js b/static/js/likec4-webcomponent.js index 434ab25..e3b1072 100644 --- a/static/js/likec4-webcomponent.js +++ b/static/js/likec4-webcomponent.js @@ -223,7 +223,7 @@ Optionally we will have a WebUI/API/CLI`},tags:[],style:{opacity:15,size:"md"},d offering capabilities like code version controling collaboration and ticketing -and security scanning`},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"local.gitea.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:12542,y:844,width:340,height:180,labelBBox:{x:46,y:18,width:278,height:139}},{id:"local.gitea.forgejoRunner",parent:"local.gitea",level:2,children:[],inEdges:["1m1lj8s"],outEdges:["se5brg"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.gitea.forgejoRunner",modelRef:"forgejoRunner",x:12542,y:150,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"local.spark.sparkoperator",parent:"local",level:1,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Spark Operator",technology:"Spark",tags:[],icon:"tech:spark",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.spark.sparkoperator",modelRef:"edp.spark.sparkoperator",x:17102,y:150,width:320,height:180,labelBBox:{x:76,y:65,width:198,height:45}}],edges:[{id:"1xqlhup",source:"edgeProvider",target:"edgeSdk",label:"built using",points:[[1035,330],[1021,352],[1007,374],[995,395],[977,425],[959,458],[943,489]],labelBBox:{x:996,y:395,width:67,height:18},parent:null,relations:["1wlvsb5"],color:"gray",line:"dashed",head:"normal"},{id:"u9omtf",source:"edgeProvider",target:"edgeProviderHost.edp",label:"hosted on",points:[[1264,255],[1378,274],[1522,320],[1596,426],[1673,536],[1652,606],[1596,727],[1576,770],[1543,808],[1507,838]],labelBBox:{x:1647,y:576,width:66,height:18},parent:null,relations:["12ssq9"],color:"gray",line:"dashed",head:"normal"},{id:"r4j4sg",source:"edgeProvider",target:"edgeProviderHost.terralist",label:"published to",points:[[1160,330],[1197,379],[1244,439],[1282,489]],labelBBox:{x:1225,y:395,width:80,height:18},parent:null,relations:["1mpjz5d"],color:"gray",line:"dashed",head:"normal"},{id:"14pfq5a",source:"edgeSdk",target:"edgeProviderHost.edp",label:"hosted on",points:[[1011,677],[1077,727],[1160,788],[1228,838]],labelBBox:{x:1125,y:742,width:66,height:18},parent:null,relations:["1sm6ifh"],color:"gray",line:"dashed",head:"normal"},{id:"lw6otg",source:"edgeSdk",target:"edgeCloud.edgeApi",label:"calls",points:[[884,677],[880,725],[875,785],[871,834]],labelBBox:{x:879,y:742,width:32,height:18},parent:null,relations:["vfhcba"],color:"gray",line:"dashed",head:"normal"},{id:"1ogkmfn",source:"edgeConnectEnv",target:"otcKubernetes.edpCluster",label:"[...]",points:[[5676,330],[5725,397],[5779,491],[5779,586],[5779,586],[5779,586],[5779,1268],[5779,1420],[5657,1426],[5518,1488],[5355,1561],[4853,1609],[4586,1630]],labelBBox:{x:5780,y:922,width:25,height:18},parent:null,relations:["18dtot7","1k6h7jf","1t1b56a"],color:"gray",line:"dashed",head:"normal"},{id:"i6v3n",source:"otcKubernetes.edpCluster",target:"edgeConnectEnv",label:"runs workflows",points:[[4576,1629],[4742,1611],[5004,1565],[5205,1457],[5317,1397],[5420,1395],[5420,1268],[5420,586],[5420,586],[5420,586],[5420,495],[5470,404],[5517,338]],labelBBox:{x:5421,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"pit45i",source:"otc-edp-per-tenant.cce",target:"otc-edp-per-tenant.cloudServices",label:null,points:[[3134,1357],[3132,1391],[3130,1430],[3128,1465],[3127,1490],[3126,1518],[3125,1543]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["1fzhjm9","15njmlz","hks76r","1w18ve8"],color:"gray",line:"dashed",head:"normal"},{id:"b27cdb",source:"otc-edp-per-tenant.cce",target:"otcKubernetes.edpCluster",label:"register",points:[[3155,1357],[3167,1404],[3190,1457],[3232,1488],[3246,1498],[3370,1498],[3387,1500],[3691,1532],[4043,1584],[4246,1615]],labelBBox:{x:3233,y:1465,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"fkkf8y",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otc-edp-per-tenant.cce",label:"registers",points:[[3135,330],[3136,521],[3139,968],[3140,1167]],labelBBox:{x:3139,y:742,width:58,height:18},parent:"otc-edp-per-tenant",relations:["g9oj4f"],color:"gray",line:"dashed",head:"normal"},{id:"r3wxut",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cce",label:"deploys edp to otc.cce",points:[[3627,990],[3508,1031],[3363,1082],[3350,1089],[3311,1112],[3272,1142],[3239,1170]],labelBBox:{x:3351,y:1089,width:143,height:18},parent:null,relations:["uk77s5"],color:"gray",line:"dashed",head:"normal"},{id:"1sng0q0",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otc-edp-per-tenant.cce",label:null,points:[[4112,1024],[4081,1043],[4046,1062],[4012,1074],[3755,1171],[3669,1110],[3403,1177],[3374,1184],[3344,1193],[3315,1203]],labelBBox:null,parent:null,relations:["jde35l"],color:"gray",line:"dashed",head:"normal"},{id:"p2umm7",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.cce",label:"runs workflows",points:[[4256,1627],[4014,1603],[3567,1552],[3420,1488],[3353,1459],[3287,1409],[3237,1364]],labelBBox:{x:3421,y:1465,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"e3benz",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cloudServices",label:"deploys edp to otc.paas",points:[[3627,949],[3366,976],[2865,1043],[2758,1177],[2681,1275],[2693,1351],[2758,1457],[2801,1527],[2880,1572],[2953,1599]],labelBBox:{x:2759,y:1255,width:152,height:18},parent:null,relations:["1pfc6bl"],color:"gray",line:"dashed",head:"normal"},{id:"1mbuxdd",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[2963,245],[2782,254],[2493,287],[2269,395],[2154,451],[2054,459],[2054,586],[2054,586],[2054,586],[2054,1268],[2054,1395],[2152,1408],[2269,1457],[2374,1501],[3333,1496],[3387,1500],[3691,1523],[4043,1578],[4246,1612]],labelBBox:{x:2055,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"126mt75",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4256,1616],[4054,1584],[3696,1530],[3387,1500],[3294,1491],[3270,1493],[3177,1488],[3065,1481],[2774,1507],[2673,1457],[2486,1365],[2367,1310],[2367,1102],[2367,586],[2367,586],[2367,586],[2367,331],[2726,263],[2952,246]],labelBBox:{x:2368,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"llfvob",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"invokes",points:[[4113,677],[4050,727],[3972,788],[3908,838]],labelBBox:{x:4021,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["dola40"],color:"gray",line:"dashed",head:"normal"},{id:"fil3na",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"invokes",points:[[4229,677],[4230,725],[4232,785],[4234,834]],labelBBox:{x:4233,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["1f5y9gc"],color:"gray",line:"dashed",head:"normal"},{id:"109g3jm",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otc-edpFoundry.cce",label:"registers",points:[[4226,330],[4226,378],[4226,438],[4226,487]],labelBBox:{x:4227,y:395,width:58,height:18},parent:"otc-edpFoundry",relations:["1umzqdy"],color:"gray",line:"dashed",head:"normal"},{id:"9r557q",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[3725,1024],[3656,1136],[3565,1330],[3663,1457],[3734,1548],[4046,1600],[4246,1625]],labelBBox:{x:3664,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"c2grk6",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"runs workflows",points:[[4256,1580],[4193,1550],[4124,1509],[4071,1457],[3948,1335],[3864,1148],[3821,1034]],labelBBox:{x:4072,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"rivecr",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4298,1024],[4311,1045],[4324,1068],[4335,1089],[4408,1235],[4420,1428],[4420,1543]],labelBBox:{x:4419,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"1ean8sr",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"runs workflows",points:[[4307,1553],[4281,1526],[4256,1493],[4241,1457],[4186,1319],[4200,1143],[4217,1034]],labelBBox:{x:4242,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"1lrp92n",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4397,272],[4653,324],[5107,436],[5107,586],[5107,586],[5107,586],[5107,1268],[5107,1504],[4791,1592],[4586,1624]],labelBBox:{x:5108,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"l1c2z3",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4486,1553],[4498,1533],[4509,1510],[4516,1488],[4519,1478],[4516,1475],[4516,1465],[4505,1003],[4667,837],[4455,426],[4437,392],[4411,362],[4381,337]],labelBBox:{x:4566,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"c8rye7",source:"edgeProviderHost.terralist",target:"edgeProviderHost.edp",label:"authenticates via",points:[[1356,677],[1356,725],[1356,785],[1356,834]],labelBBox:{x:1357,y:742,width:109,height:18},parent:"edgeProviderHost",relations:["1q6ftvm"],color:"gray",line:"dashed",head:"normal"},{id:"1toht4t",source:"edgeCloud.edgeApi",target:"edgeCloud.edgeResources",label:"creates/destroys",points:[[863,1024],[863,1068],[863,1121],[863,1167]],labelBBox:{x:864,y:1089,width:107,height:18},parent:"edgeCloud",relations:["rr0lcz"],color:"gray",line:"dashed",head:"normal"},{id:"rj56uy",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantObservability",label:"deploys",points:[[18066,330],[18002,380],[17922,441],[17856,491]],labelBBox:{x:17972,y:395,width:52,height:18},parent:"otcTenantProd",relations:["1fxu52d"],color:"gray",line:"dashed",head:"normal"},{id:"u7ohgi",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantCustomerA",label:"deploys",points:[[18182,330],[18182,378],[18182,438],[18182,487]],labelBBox:{x:18183,y:395,width:52,height:18},parent:"otcTenantProd",relations:["6gfo3g"],color:"gray",line:"dashed",head:"normal"},{id:"1ypat9q",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantDev1",label:"deploys",points:[[18303,330],[18370,380],[18454,441],[18523,491]],labelBBox:{x:18418,y:395,width:52,height:18},parent:null,relations:["s1ie0n"],color:"gray",line:"dashed",head:"normal"},{id:"1oiku86",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantTestX",label:"deploys",points:[[18342,301],[18507,363],[18764,460],[18933,523]],labelBBox:{x:18643,y:395,width:52,height:18},parent:null,relations:["77azfi"],color:"gray",line:"dashed",head:"normal"},{id:"1m1lj8s",source:"otcKubernetes.edpCluster",target:"local.gitea.forgejoRunner",label:"runs workflows",points:[[4576,1640],[4990,1629],[6066,1572],[6066,1268],[6066,586],[6066,586],[6066,586],[6066,443],[6191,441],[6327,395],[6381,377],[8323,382],[8380,380],[9996,349],[11952,272],[12532,248]],labelBBox:{x:6067,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"19kg5y",source:"local.backstage.backstage",target:"local.backstage.database",label:"reads/writes",points:[[8608,1024],[8608,1068],[8608,1121],[8608,1166]],labelBBox:{x:8609,y:1089,width:79,height:18},parent:"local.backstage",relations:["c23sak"],color:"gray",line:"dashed",head:"normal"},{id:"1gfgfhk",source:"local.argocd.argocdAppController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9205,1024],[9236,1043],[9270,1061],[9303,1074],[9547,1172],[9848,1223],[10033,1248]],labelBBox:{x:9397,y:1089,width:65,height:18},parent:"local.argocd",relations:["10vkxaf"],color:"gray",line:"dashed",head:"normal"},{id:"qfu5xm",source:"local.argocd.argocdAppSetController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9665,1024],[9693,1042],[9724,1059],[9753,1074],[9844,1121],[9948,1166],[10034,1201]],labelBBox:{x:9826,y:1089,width:65,height:18},parent:"local.argocd",relations:["i8z0mi"],color:"gray",line:"dashed",head:"normal"},{id:"g7xnzs",source:"local.argocd.argocdRepoServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10038,1024],[10069,1069],[10106,1123],[10137,1169]],labelBBox:{x:10098,y:1089,width:65,height:18},parent:"local.argocd",relations:["iullhy"],color:"gray",line:"dashed",head:"normal"},{id:"fon3rk",source:"local.argocd.argocdServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10368,1024],[10337,1069],[10300,1123],[10269,1169]],labelBBox:{x:10323,y:1089,width:65,height:18},parent:"local.argocd",relations:["yfhhi5"],color:"gray",line:"dashed",head:"normal"},{id:"4zwy1m",source:"local.keycloak.keycloak",target:"local.keycloak.keycloakDB",label:"reads/writes",points:[[10898,1024],[10898,1068],[10898,1121],[10898,1166]],labelBBox:{x:10899,y:1089,width:79,height:18},parent:"local.keycloak",relations:["18zxrhs"],color:"gray",line:"dashed",head:"normal"},{id:"sb2j38",source:"local.monitoring.alloy",target:"local.monitoring.distributor",label:"pushes logs",points:[[7688,1024],[7688,1068],[7688,1121],[7688,1167]],labelBBox:{x:7689,y:1089,width:79,height:18},parent:"local.monitoring",relations:["11ollyi"],color:"gray",line:"dashed",head:"normal"},{id:"15juth8",source:"local.ingressNginx.ingressNginx",target:"local.backstage.backstage",label:"https",points:[[10543,677],[10519,697],[10491,716],[10462,727],[10345,772],[9461,762],[9336,765],[9308,766],[8862,765],[8836,773],[8793,787],[8751,812],[8715,839]],labelBBox:{x:10373,y:742,width:34,height:18},parent:"local",relations:["v8c8aq"],color:"gray",line:"dashed",head:"normal"},{id:"p2br4p",source:"local.ingressNginx.ingressNginx",target:"local.argocd.argocdServer",label:"https",points:[[10575,677],[10547,726],[10513,786],[10484,836]],labelBBox:{x:10534,y:742,width:34,height:18},parent:"local",relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"o229dq",source:"local.ingressNginx.ingressNginx",target:"local.gitea.forgejo",label:"https",points:[[10786,594],[11175,611],[12165,662],[12474,773],[12517,789],[12559,813],[12596,839]],labelBBox:{x:12450,y:742,width:34,height:18},parent:"local",relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"2vnvvg",source:"local.ingressNginx.ingressNginx",target:"local.keycloak.keycloak",label:"https",points:[[10696,677],[10734,726],[10782,786],[10821,836]],labelBBox:{x:10763,y:742,width:34,height:18},parent:"local",relations:["h3rut2"],color:"gray",line:"dashed",head:"normal"},{id:"3znaik",source:"local.velero.velero",target:"local.minio.minio",label:"store backups",points:[[12250,677],[12250,725],[12250,784],[12250,833]],labelBBox:{x:12251,y:742,width:91,height:18},parent:"local",relations:["1mazt1x"],color:"gray",line:"dashed",head:"normal"},{id:"4ix58c",source:"local.ingressNginx.ingressNginx",target:"local.minio.minio",label:"https",points:[[10786,600],[11103,624],[11801,686],[12024,773],[12064,789],[12104,814],[12139,839]],labelBBox:{x:11986,y:742,width:34,height:18},parent:"local",relations:["fe65w2"],color:"gray",line:"dashed",head:"normal"},{id:"1hr2s5j",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.alloy",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10197,827],[8182,685],[7913,773],[7871,787],[7829,812],[7794,838]],labelBBox:{x:10397,y:742,width:34,height:18},parent:"local",relations:["1jvab2g"],color:"gray",line:"dashed",head:"normal"},{id:"1nksp5g",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.queryFrontend",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10244,810],[8587,701],[8366,773],[8323,787],[8281,812],[8245,839]],labelBBox:{x:10385,y:742,width:34,height:18},parent:"local",relations:["fs60l7"],color:"gray",line:"dashed",head:"normal"},{id:"m2japo",source:"local.ingressNginx.ingressNginx",target:"local.openbao.openbao",label:"https",points:[[10544,677],[10520,698],[10492,716],[10462,727],[10435,738],[8382,742],[8353,742],[8202,745],[7139,726],[6996,773],[6953,787],[6911,812],[6875,839]],labelBBox:{x:8354,y:742,width:34,height:18},parent:"local",relations:["1p30hav"],color:"gray",line:"dashed",head:"normal"},{id:"4drflo",source:"local.ingressNginx.ingressNginx",target:"local.fibonacci.fibonacci",label:"https",points:[[10786,632],[10890,664],[11027,712],[11140,773],[11174,792],[11208,815],[11239,838]],labelBBox:{x:11115,y:742,width:34,height:18},parent:"local",relations:["1i5f8um"],color:"gray",line:"dashed",head:"normal"},{id:"ihlgsc",source:"local.ingressNginx.ingressNginx",target:"local.mailhog.mailhog",label:"https",points:[[10786,599],[10980,616],[11312,660],[11574,773],[11613,790],[11652,814],[11686,839]],labelBBox:{x:11551,y:742,width:34,height:18},parent:"local",relations:["ofdedh"],color:"gray",line:"dashed",head:"normal"},{id:"se5brg",source:"local.gitea.forgejoRunner",target:"otcKubernetes.edpCluster",label:"register",points:[[12542,246],[11564,274],[6425,428],[6425,586],[6425,586],[6425,586],[6425,1268],[6425,1411],[6297,1404],[6164,1457],[5880,1571],[4968,1620],[4586,1636]],labelBBox:{x:6426,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"edp-per-tenant":{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/otc/edp.c4",description:null,title:"EDP per tenant",id:"edp-per-tenant",autoLayout:{direction:"TB"},hash:"1767a1203e463aa5c6283c309b8414cd4b5d1b8f",bounds:{x:0,y:0,width:2010,height:1175},nodes:[{id:"otc-edp-per-tenant",parent:null,level:0,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure","otc-edp-per-tenant.cce","otc-edp-per-tenant.cloudServices"],inEdges:[],outEdges:[],deploymentRef:"otc-edp-per-tenant",title:"OTC EDP per tenant cluster",kind:"cloud",technology:"OTC",color:"slate",shape:"rectangle",description:{txt:`OTC environment for EDP. EDP is the environment a customer gets from us. +and security scanning`},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"local.gitea.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:12542,y:844,width:340,height:180,labelBBox:{x:46,y:18,width:278,height:139}},{id:"local.gitea.forgejoRunner",parent:"local.gitea",level:2,children:[],inEdges:["1m1lj8s"],outEdges:["se5brg"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.gitea.forgejoRunner",modelRef:"forgejoRunner",x:12542,y:150,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"local.spark.sparkoperator",parent:"local",level:1,children:[],inEdges:[],outEdges:[],kind:"instance",title:"Spark Operator",technology:"Spark",tags:[],icon:"tech:spark",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"local.spark.sparkoperator",modelRef:"edp.spark.sparkoperator",x:17102,y:150,width:320,height:180,labelBBox:{x:76,y:65,width:198,height:45}}],edges:[{id:"1xqlhup",source:"edgeProvider",target:"edgeSdk",label:"built using",points:[[1035,330],[1021,352],[1007,374],[995,395],[977,425],[959,458],[943,489]],labelBBox:{x:996,y:395,width:67,height:18},parent:null,relations:["1wlvsb5"],color:"gray",line:"dashed",head:"normal"},{id:"u9omtf",source:"edgeProvider",target:"edgeProviderHost.edp",label:"hosted on",points:[[1264,255],[1378,274],[1522,320],[1596,426],[1673,536],[1652,606],[1596,727],[1576,770],[1543,808],[1507,838]],labelBBox:{x:1647,y:576,width:66,height:18},parent:null,relations:["12ssq9"],color:"gray",line:"dashed",head:"normal"},{id:"r4j4sg",source:"edgeProvider",target:"edgeProviderHost.terralist",label:"published to",points:[[1160,330],[1197,379],[1244,439],[1282,489]],labelBBox:{x:1225,y:395,width:80,height:18},parent:null,relations:["1mpjz5d"],color:"gray",line:"dashed",head:"normal"},{id:"14pfq5a",source:"edgeSdk",target:"edgeProviderHost.edp",label:"hosted on",points:[[1011,677],[1077,727],[1160,788],[1228,838]],labelBBox:{x:1125,y:742,width:66,height:18},parent:null,relations:["1sm6ifh"],color:"gray",line:"dashed",head:"normal"},{id:"lw6otg",source:"edgeSdk",target:"edgeCloud.edgeApi",label:"calls",points:[[884,677],[880,725],[875,785],[871,834]],labelBBox:{x:879,y:742,width:32,height:18},parent:null,relations:["vfhcba"],color:"gray",line:"dashed",head:"normal"},{id:"1ogkmfn",source:"edgeConnectEnv",target:"otcKubernetes.edpCluster",label:"[...]",points:[[5676,330],[5725,397],[5779,491],[5779,586],[5779,586],[5779,586],[5779,1268],[5779,1420],[5657,1426],[5518,1488],[5355,1561],[4853,1609],[4586,1630]],labelBBox:{x:5780,y:922,width:25,height:18},parent:null,relations:["18dtot7","1k6h7jf","15ss7lz"],color:"gray",line:"dashed",head:"normal"},{id:"i6v3n",source:"otcKubernetes.edpCluster",target:"edgeConnectEnv",label:"runs workflows",points:[[4576,1629],[4742,1611],[5004,1565],[5205,1457],[5317,1397],[5420,1395],[5420,1268],[5420,586],[5420,586],[5420,586],[5420,495],[5470,404],[5517,338]],labelBBox:{x:5421,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"pit45i",source:"otc-edp-per-tenant.cce",target:"otc-edp-per-tenant.cloudServices",label:null,points:[[3134,1357],[3132,1391],[3130,1430],[3128,1465],[3127,1490],[3126,1518],[3125,1543]],labelBBox:null,parent:"otc-edp-per-tenant",relations:["1fzhjm9","15njmlz","hks76r","1w18ve8"],color:"gray",line:"dashed",head:"normal"},{id:"b27cdb",source:"otc-edp-per-tenant.cce",target:"otcKubernetes.edpCluster",label:"register",points:[[3155,1357],[3167,1404],[3190,1457],[3232,1488],[3246,1498],[3370,1498],[3387,1500],[3691,1532],[4043,1584],[4246,1615]],labelBBox:{x:3233,y:1465,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"fkkf8y",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otc-edp-per-tenant.cce",label:"registers",points:[[3135,330],[3136,521],[3139,968],[3140,1167]],labelBBox:{x:3139,y:742,width:58,height:18},parent:"otc-edp-per-tenant",relations:["g9oj4f"],color:"gray",line:"dashed",head:"normal"},{id:"r3wxut",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cce",label:"deploys edp to otc.cce",points:[[3627,990],[3508,1031],[3363,1082],[3350,1089],[3311,1112],[3272,1142],[3239,1170]],labelBBox:{x:3351,y:1089,width:143,height:18},parent:null,relations:["uk77s5"],color:"gray",line:"dashed",head:"normal"},{id:"1sng0q0",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otc-edp-per-tenant.cce",label:null,points:[[4112,1024],[4081,1043],[4046,1062],[4012,1074],[3755,1171],[3669,1110],[3403,1177],[3374,1184],[3344,1193],[3315,1203]],labelBBox:null,parent:null,relations:["jde35l"],color:"gray",line:"dashed",head:"normal"},{id:"p2umm7",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.cce",label:"runs workflows",points:[[4256,1627],[4014,1603],[3567,1552],[3420,1488],[3353,1459],[3287,1409],[3237,1364]],labelBBox:{x:3421,y:1465,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"e3benz",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otc-edp-per-tenant.cloudServices",label:"deploys edp to otc.paas",points:[[3627,949],[3366,976],[2865,1043],[2758,1177],[2681,1275],[2693,1351],[2758,1457],[2801,1527],[2880,1572],[2953,1599]],labelBBox:{x:2759,y:1255,width:152,height:18},parent:null,relations:["1pfc6bl"],color:"gray",line:"dashed",head:"normal"},{id:"1mbuxdd",source:"otc-edp-per-tenant.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[2963,245],[2782,254],[2493,287],[2269,395],[2154,451],[2054,459],[2054,586],[2054,586],[2054,586],[2054,1268],[2054,1395],[2152,1408],[2269,1457],[2374,1501],[3333,1496],[3387,1500],[3691,1523],[4043,1578],[4246,1612]],labelBBox:{x:2055,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"126mt75",source:"otcKubernetes.edpCluster",target:"otc-edp-per-tenant.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4256,1616],[4054,1584],[3696,1530],[3387,1500],[3294,1491],[3270,1493],[3177,1488],[3065,1481],[2774,1507],[2673,1457],[2486,1365],[2367,1310],[2367,1102],[2367,586],[2367,586],[2367,586],[2367,331],[2726,263],[2952,246]],labelBBox:{x:2368,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"llfvob",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"invokes",points:[[4113,677],[4050,727],[3972,788],[3908,838]],labelBBox:{x:4021,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["dola40"],color:"gray",line:"dashed",head:"normal"},{id:"fil3na",source:"otc-edpFoundry.cce",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"invokes",points:[[4229,677],[4230,725],[4232,785],[4234,834]],labelBBox:{x:4233,y:742,width:51,height:18},parent:"otc-edpFoundry",relations:["1f5y9gc"],color:"gray",line:"dashed",head:"normal"},{id:"109g3jm",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otc-edpFoundry.cce",label:"registers",points:[[4226,330],[4226,378],[4226,438],[4226,487]],labelBBox:{x:4227,y:395,width:58,height:18},parent:"otc-edpFoundry",relations:["1umzqdy"],color:"gray",line:"dashed",head:"normal"},{id:"9r557q",source:"otc-edpFoundry.workflowSetupEDPInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[3725,1024],[3656,1136],[3565,1330],[3663,1457],[3734,1548],[4046,1600],[4246,1625]],labelBBox:{x:3664,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"c2grk6",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupEDPInfrastructure",label:"runs workflows",points:[[4256,1580],[4193,1550],[4124,1509],[4071,1457],[3948,1335],[3864,1148],[3821,1034]],labelBBox:{x:4072,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"rivecr",source:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4298,1024],[4311,1045],[4324,1068],[4335,1089],[4408,1235],[4420,1428],[4420,1543]],labelBBox:{x:4419,y:1255,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"1ean8sr",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.workflowSetupArgoCDInfrastructure",label:"runs workflows",points:[[4307,1553],[4281,1526],[4256,1493],[4241,1457],[4186,1319],[4200,1143],[4217,1034]],labelBBox:{x:4242,y:1255,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"1lrp92n",source:"otc-edpFoundry.forgejoRunnerInfrastructure",target:"otcKubernetes.edpCluster",label:"register",points:[[4397,272],[4653,324],[5107,436],[5107,586],[5107,586],[5107,586],[5107,1268],[5107,1504],[4791,1592],[4586,1624]],labelBBox:{x:5108,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"},{id:"l1c2z3",source:"otcKubernetes.edpCluster",target:"otc-edpFoundry.forgejoRunnerInfrastructure",label:"runs workflows",points:[[4486,1553],[4498,1533],[4509,1510],[4516,1488],[4519,1478],[4516,1475],[4516,1465],[4505,1003],[4667,837],[4455,426],[4437,392],[4411,362],[4381,337]],labelBBox:{x:4566,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"c8rye7",source:"edgeProviderHost.terralist",target:"edgeProviderHost.edp",label:"authenticates via",points:[[1356,677],[1356,725],[1356,785],[1356,834]],labelBBox:{x:1357,y:742,width:109,height:18},parent:"edgeProviderHost",relations:["1q6ftvm"],color:"gray",line:"dashed",head:"normal"},{id:"1toht4t",source:"edgeCloud.edgeApi",target:"edgeCloud.edgeResources",label:"creates/destroys",points:[[863,1024],[863,1068],[863,1121],[863,1167]],labelBBox:{x:864,y:1089,width:107,height:18},parent:"edgeCloud",relations:["rr0lcz"],color:"gray",line:"dashed",head:"normal"},{id:"rj56uy",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantObservability",label:"deploys",points:[[18066,330],[18002,380],[17922,441],[17856,491]],labelBBox:{x:17972,y:395,width:52,height:18},parent:"otcTenantProd",relations:["1fxu52d"],color:"gray",line:"dashed",head:"normal"},{id:"u7ohgi",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantProd.otcTenantCustomerA",label:"deploys",points:[[18182,330],[18182,378],[18182,438],[18182,487]],labelBBox:{x:18183,y:395,width:52,height:18},parent:"otcTenantProd",relations:["6gfo3g"],color:"gray",line:"dashed",head:"normal"},{id:"1ypat9q",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantDev1",label:"deploys",points:[[18303,330],[18370,380],[18454,441],[18523,491]],labelBBox:{x:18418,y:395,width:52,height:18},parent:null,relations:["s1ie0n"],color:"gray",line:"dashed",head:"normal"},{id:"1oiku86",source:"otcTenantProd.otcTenantEdpBuildthing",target:"otcTenantNonProd.otcTenantTestX",label:"deploys",points:[[18342,301],[18507,363],[18764,460],[18933,523]],labelBBox:{x:18643,y:395,width:52,height:18},parent:null,relations:["77azfi"],color:"gray",line:"dashed",head:"normal"},{id:"1m1lj8s",source:"otcKubernetes.edpCluster",target:"local.gitea.forgejoRunner",label:"runs workflows",points:[[4576,1640],[4990,1629],[6066,1572],[6066,1268],[6066,586],[6066,586],[6066,586],[6066,443],[6191,441],[6327,395],[6381,377],[8323,382],[8380,380],[9996,349],[11952,272],[12532,248]],labelBBox:{x:6067,y:923,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"19kg5y",source:"local.backstage.backstage",target:"local.backstage.database",label:"reads/writes",points:[[8608,1024],[8608,1068],[8608,1121],[8608,1166]],labelBBox:{x:8609,y:1089,width:79,height:18},parent:"local.backstage",relations:["c23sak"],color:"gray",line:"dashed",head:"normal"},{id:"1gfgfhk",source:"local.argocd.argocdAppController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9205,1024],[9236,1043],[9270,1061],[9303,1074],[9547,1172],[9848,1223],[10033,1248]],labelBBox:{x:9397,y:1089,width:65,height:18},parent:"local.argocd",relations:["10vkxaf"],color:"gray",line:"dashed",head:"normal"},{id:"qfu5xm",source:"local.argocd.argocdAppSetController",target:"local.argocd.argocdRedis",label:"read/write",points:[[9665,1024],[9693,1042],[9724,1059],[9753,1074],[9844,1121],[9948,1166],[10034,1201]],labelBBox:{x:9826,y:1089,width:65,height:18},parent:"local.argocd",relations:["i8z0mi"],color:"gray",line:"dashed",head:"normal"},{id:"g7xnzs",source:"local.argocd.argocdRepoServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10038,1024],[10069,1069],[10106,1123],[10137,1169]],labelBBox:{x:10098,y:1089,width:65,height:18},parent:"local.argocd",relations:["iullhy"],color:"gray",line:"dashed",head:"normal"},{id:"fon3rk",source:"local.argocd.argocdServer",target:"local.argocd.argocdRedis",label:"read/write",points:[[10368,1024],[10337,1069],[10300,1123],[10269,1169]],labelBBox:{x:10323,y:1089,width:65,height:18},parent:"local.argocd",relations:["yfhhi5"],color:"gray",line:"dashed",head:"normal"},{id:"4zwy1m",source:"local.keycloak.keycloak",target:"local.keycloak.keycloakDB",label:"reads/writes",points:[[10898,1024],[10898,1068],[10898,1121],[10898,1166]],labelBBox:{x:10899,y:1089,width:79,height:18},parent:"local.keycloak",relations:["18zxrhs"],color:"gray",line:"dashed",head:"normal"},{id:"sb2j38",source:"local.monitoring.alloy",target:"local.monitoring.distributor",label:"pushes logs",points:[[7688,1024],[7688,1068],[7688,1121],[7688,1167]],labelBBox:{x:7689,y:1089,width:79,height:18},parent:"local.monitoring",relations:["11ollyi"],color:"gray",line:"dashed",head:"normal"},{id:"15juth8",source:"local.ingressNginx.ingressNginx",target:"local.backstage.backstage",label:"https",points:[[10543,677],[10519,697],[10491,716],[10462,727],[10345,772],[9461,762],[9336,765],[9308,766],[8862,765],[8836,773],[8793,787],[8751,812],[8715,839]],labelBBox:{x:10373,y:742,width:34,height:18},parent:"local",relations:["v8c8aq"],color:"gray",line:"dashed",head:"normal"},{id:"p2br4p",source:"local.ingressNginx.ingressNginx",target:"local.argocd.argocdServer",label:"https",points:[[10575,677],[10547,726],[10513,786],[10484,836]],labelBBox:{x:10534,y:742,width:34,height:18},parent:"local",relations:["1yssos5"],color:"gray",line:"dashed",head:"normal"},{id:"o229dq",source:"local.ingressNginx.ingressNginx",target:"local.gitea.forgejo",label:"https",points:[[10786,594],[11175,611],[12165,662],[12474,773],[12517,789],[12559,813],[12596,839]],labelBBox:{x:12450,y:742,width:34,height:18},parent:"local",relations:["123efwn"],color:"gray",line:"dashed",head:"normal"},{id:"2vnvvg",source:"local.ingressNginx.ingressNginx",target:"local.keycloak.keycloak",label:"https",points:[[10696,677],[10734,726],[10782,786],[10821,836]],labelBBox:{x:10763,y:742,width:34,height:18},parent:"local",relations:["h3rut2"],color:"gray",line:"dashed",head:"normal"},{id:"3znaik",source:"local.velero.velero",target:"local.minio.minio",label:"store backups",points:[[12250,677],[12250,725],[12250,784],[12250,833]],labelBBox:{x:12251,y:742,width:91,height:18},parent:"local",relations:["1mazt1x"],color:"gray",line:"dashed",head:"normal"},{id:"4ix58c",source:"local.ingressNginx.ingressNginx",target:"local.minio.minio",label:"https",points:[[10786,600],[11103,624],[11801,686],[12024,773],[12064,789],[12104,814],[12139,839]],labelBBox:{x:11986,y:742,width:34,height:18},parent:"local",relations:["fe65w2"],color:"gray",line:"dashed",head:"normal"},{id:"1hr2s5j",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.alloy",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10197,827],[8182,685],[7913,773],[7871,787],[7829,812],[7794,838]],labelBBox:{x:10397,y:742,width:34,height:18},parent:"local",relations:["1jvab2g"],color:"gray",line:"dashed",head:"normal"},{id:"1nksp5g",source:"local.ingressNginx.ingressNginx",target:"local.monitoring.queryFrontend",label:"https",points:[[10543,677],[10519,698],[10491,716],[10462,727],[10244,810],[8587,701],[8366,773],[8323,787],[8281,812],[8245,839]],labelBBox:{x:10385,y:742,width:34,height:18},parent:"local",relations:["fs60l7"],color:"gray",line:"dashed",head:"normal"},{id:"m2japo",source:"local.ingressNginx.ingressNginx",target:"local.openbao.openbao",label:"https",points:[[10544,677],[10520,698],[10492,716],[10462,727],[10435,738],[8382,742],[8353,742],[8202,745],[7139,726],[6996,773],[6953,787],[6911,812],[6875,839]],labelBBox:{x:8354,y:742,width:34,height:18},parent:"local",relations:["1p30hav"],color:"gray",line:"dashed",head:"normal"},{id:"4drflo",source:"local.ingressNginx.ingressNginx",target:"local.fibonacci.fibonacci",label:"https",points:[[10786,632],[10890,664],[11027,712],[11140,773],[11174,792],[11208,815],[11239,838]],labelBBox:{x:11115,y:742,width:34,height:18},parent:"local",relations:["1i5f8um"],color:"gray",line:"dashed",head:"normal"},{id:"ihlgsc",source:"local.ingressNginx.ingressNginx",target:"local.mailhog.mailhog",label:"https",points:[[10786,599],[10980,616],[11312,660],[11574,773],[11613,790],[11652,814],[11686,839]],labelBBox:{x:11551,y:742,width:34,height:18},parent:"local",relations:["ofdedh"],color:"gray",line:"dashed",head:"normal"},{id:"se5brg",source:"local.gitea.forgejoRunner",target:"otcKubernetes.edpCluster",label:"register",points:[[12542,246],[11564,274],[6425,428],[6425,586],[6425,586],[6425,586],[6425,1268],[6425,1411],[6297,1404],[6164,1457],[5880,1571],[4968,1620],[4586,1636]],labelBBox:{x:6426,y:923,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"edp-per-tenant":{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/deployment/otc/edp.c4",description:null,title:"EDP per tenant",id:"edp-per-tenant",autoLayout:{direction:"TB"},hash:"1767a1203e463aa5c6283c309b8414cd4b5d1b8f",bounds:{x:0,y:0,width:2010,height:1175},nodes:[{id:"otc-edp-per-tenant",parent:null,level:0,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure","otc-edp-per-tenant.cce","otc-edp-per-tenant.cloudServices"],inEdges:[],outEdges:[],deploymentRef:"otc-edp-per-tenant",title:"OTC EDP per tenant cluster",kind:"cloud",technology:"OTC",color:"slate",shape:"rectangle",description:{txt:`OTC environment for EDP. EDP is the environment a customer gets from us. This is kubernetes clusters and other infrastructure like nodes and vms, and platform services. All is set up by IaC-pipelines in the Foundry.`},tags:[],style:{opacity:15,size:"md"},depth:3,x:8,y:8,width:1994,height:1159,labelBBox:{x:6,y:0,width:181,height:15}},{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner"],inEdges:[],outEdges:["1dcszi5"],deploymentRef:"otc-edp-per-tenant.forgejoRunnerInfrastructure",title:"EDP ForgejoRunner infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},tags:[],style:{opacity:15,size:"md"},depth:1,x:321,y:150,width:384,height:266,labelBBox:{x:6,y:0,width:235,height:15}},{id:"otc-edp-per-tenant.cce",parent:"otc-edp-per-tenant",level:1,children:["otc-edp-per-tenant.cce.edp"],inEdges:["1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],deploymentRef:"otc-edp-per-tenant.cce",title:"OTC CCE",kind:"kubernetes",technology:"Kubernetes",color:"red",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine"},tags:[],style:{opacity:15,size:"md"},depth:2,x:755,y:79,width:954,height:719,labelBBox:{x:6,y:0,width:54,height:15}},{id:"otc-edp-per-tenant.cce.edp",parent:"otc-edp-per-tenant.cce",level:2,children:["otc-edp-per-tenant.cce.edp.externalSecrets","otc-edp-per-tenant.cce.edp.ingressNginx","otc-edp-per-tenant.cce.edp.argoCD","otc-edp-per-tenant.cce.edp.forgejo"],inEdges:["1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],deploymentRef:"otc-edp-per-tenant.cce.edp",title:"EDP",kind:"cluster",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:787,y:132,width:890,height:634,labelBBox:{x:6,y:0,width:27,height:15}},{id:"otc-edp-per-tenant.cce.edp.externalSecrets",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:[],outEdges:[],kind:"instance",title:"external-secrets",description:{txt:"Provider to access externally stored Kubernetes secrets"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.externalSecrets",modelRef:"edp.externalSecrets",navigateTo:"externalSecrets",x:837,y:204,width:320,height:180,labelBBox:{x:39,y:54,width:242,height:65}},{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",parent:"otc-edp-per-tenant.forgejoRunnerInfrastructure",level:2,children:[],inEdges:[],outEdges:["1dcszi5"],kind:"instance",title:"Forgejo Runner",description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:353,y:204,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}},{id:"otc-edp-per-tenant.cce.edp.ingressNginx",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:[],outEdges:["1ir70dd","1kr1wg1"],kind:"instance",title:"Ingress",description:{txt:"Ingress Controller for incoming http(s) traffic"},tags:["internal"],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.ingressNginx",modelRef:"edp.ingressNginx",navigateTo:"ingressNginx",x:1287,y:204,width:320,height:180,labelBBox:{x:33,y:54,width:255,height:65}},{id:"otc-edp-per-tenant.cce.edp.argoCD",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:["1ir70dd"],outEdges:[],kind:"instance",title:"ArgoCD",description:{txt:"GitOps Service"},tags:[],color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otc-edp-per-tenant.cce.edp.argoCD",modelRef:"edp.argoCD",navigateTo:"argoCD",x:1307,y:536,width:320,height:180,labelBBox:{x:108,y:63,width:105,height:48}},{id:"otc-edp-per-tenant.cce.edp.forgejo",parent:"otc-edp-per-tenant.cce.edp",level:3,children:[],inEdges:["1kr1wg1","1dcszi5"],outEdges:["8msu1q","120qe5o","ealiax","1trj5u6"],kind:"instance",title:"Forgejo",description:{txt:`Fully managed DevOps Platform offering capabilities like @@ -263,7 +263,7 @@ discover the expected and uncover the unexpected.`},technology:"Elasticsearch",t offering capabilities like code version controling collaboration and ticketing -and security scanning`},tags:[],technology:"Golang",kind:"container",isCustomized:!0,navigateTo:"forgejo",x:48,y:553,width:340,height:180,labelBBox:{x:46,y:17,width:279,height:139}},{id:"edp.garm",parent:"edp",level:1,children:["edp.garm.garm","edp.garm.providerEdgeConnect"],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-03","step-04","step-07","step-09","step-18","step-19"],title:"Garm Image",modelRef:"edp.garm",shape:"rectangle",color:"primary",icon:"tech:docker",style:{opacity:20,size:"md"},tags:[],kind:"container",depth:1,x:709,y:142,width:1090,height:404,labelBBox:{x:6,y:0,width:77,height:15}},{id:"edp.garm.garm",parent:"edp.garm",level:2,children:[],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-02","step-07","step-09","step-17"],title:"Garm",modelRef:"edp.garm.garm",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Provisions runners for Forgejo"},tags:[],kind:"component",x:749,y:316,width:325,height:180,labelBBox:{x:47,y:63,width:262,height:47}},{id:"edp.garm.providerEdgeConnect",parent:"edp.garm",level:2,children:[],inEdges:["step-02","step-17"],outEdges:["step-03","step-04","step-18","step-19"],title:"Garm Provider for EdgeConnect",modelRef:"edp.garm.providerEdgeConnect",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Acts as abstraction layer for EdgeConnect"},tags:[],kind:"component",x:1349,y:203,width:409,height:180,labelBBox:{x:47,y:54,width:347,height:65}},{id:"edgeConnect",parent:null,level:0,children:[],inEdges:["step-03","step-04","step-18","step-19"],outEdges:["step-05"],title:"EdgeConnect Cloud",modelRef:"edgeConnect",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Provides an API and control plane to run applications on the edge"},tags:[],kind:"system",x:2135,y:169,width:320,height:180,labelBBox:{x:24,y:54,width:273,height:65}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-05","step-09","step-12","step-15"],outEdges:["step-06","step-10","step-11","step-12","step-13","step-15"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:2665,y:810,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}}],edges:[{id:"step-01",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A new job is pending",points:[[389,687],[482,703],[596,707],[689,664],[761,631],[818,563],[857,504]],labelBBox:{x:458,y:632,width:228,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@0"},{id:"step-02",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Create new runner",points:[[1074,428],[1142,433],[1220,433],[1289,417],[1321,410],[1352,399],[1383,387]],labelBBox:{x:1144,y:385,width:141,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@1"},{id:"step-03",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create App (Runner)",points:[[1639,203],[1692,152],[1767,92],[1847,65],[1943,32],[1980,29],[2075,65],[2128,85],[2176,124],[2214,162]],labelBBox:{x:1886,y:7,width:156,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@2"},{id:"step-04",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create AppInstance (Runner)",points:[[1759,234],[1788,228],[1818,222],[1847,219],[1948,206],[1974,210],[2075,219],[2091,220],[2108,222],[2125,225]],labelBBox:{x:1859,y:178,width:209,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@3"},{id:"step-05",source:"edgeConnect",target:"forgejoRunner",label:"Deploys",points:[[2448,349],[2502,386],[2560,432],[2605,484],[2687,579],[2750,711],[2787,800]],labelBBox:{x:2524,y:372,width:77,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@4"},{id:"step-06",source:"forgejoRunner",target:"edp.garm.garm",label:"Get runner registration token",points:[[1084,448],[1101,452],[1118,455],[1134,459],[1784,591],[2007,420],[2605,706],[2657,731],[2706,772],[2745,810]],labelBBox:{x:1862,y:491,width:204,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@5"},{id:"step-07",source:"edp.garm.garm",target:"edp.forgejo",label:"Get runner registration token",points:[[399,600],[488,577],[595,546],[689,510],[709,503],[730,495],[750,486]],labelBBox:{x:470,y:478,width:204,height:19},dir:"back",parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@6"},{id:"step-08",source:"edp.forgejo",target:"edp.garm.garm",label:"Token",points:[[300,553],[341,514],[393,472],[449,449],[540,410],[650,399],[739,397]],labelBBox:{x:539,y:368,width:65,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@7"},{id:"step-09",source:"edp.garm.garm",target:"forgejoRunner",label:"Token",points:[[1074,487],[1094,496],[1115,504],[1134,511],[1676,699],[2346,822],[2654,873]],labelBBox:{x:1931,y:682,width:65,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@8"},{id:"step-10",source:"forgejoRunner",target:"edp.forgejo",label:"Register runner",points:[[399,713],[415,718],[432,722],[449,726],[1184,886],[1385,807],[2135,865],[2304,878],[2346,883],[2515,892],[2564,894],[2617,896],[2665,897]],labelBBox:{x:1492,y:803,width:129,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@9"},{id:"step-11",source:"forgejoRunner",target:"edp.forgejo",label:"Fetch job",points:[[272,741],[371,914],[606,1253],[911,1253],[911,1253],[911,1253],[2296,1253],[2485,1253],[2658,1094],[2751,990]],labelBBox:{x:1511,y:1220,width:92,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@10"},{id:"step-12",source:"forgejoRunner",target:"forgejoRunner",label:"Work on job",points:[[2802,810],[2796,753],[2804,700],[2825,700],[2845,700],[2852,747],[2849,799]],labelBBox:{x:2773,y:667,width:109,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@11"},{id:"step-13",source:"forgejoRunner",target:"edp.forgejo",label:"Send result",points:[[240,743],[268,866],[332,1075],[449,1217],[604,1404],[667,1512],[911,1512],[911,1512],[911,1512],[2296,1512],[2568,1512],[2731,1160],[2794,990]],labelBBox:{x:1505,y:1479,width:104,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@12"},{id:"step-14",source:"edp.forgejo",target:"edp.forgejo",label:"Deregister Runner",points:[[157,553],[142,496],[163,443],[218,443],[271,443],[292,490],[282,542]],labelBBox:{x:147,y:410,width:148,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@13"},{id:"step-15",source:"forgejoRunner",target:"forgejoRunner",label:"Terminate",points:[[2788,810],[2763,708],[2775,590],[2825,590],[2873,590],[2886,700],[2864,800]],labelBBox:{x:2779,y:557,width:97,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@14"},{id:"step-16",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A job finished",points:[[258,553],[295,479],[358,379],[449,334],[538,289],[649,304],[740,332]],labelBBox:{x:477,y:273,width:189,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@15"},{id:"step-17",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Delete runner",points:[[1074,368],[1094,363],[1115,359],[1134,356],[1201,343],[1274,332],[1340,322]],labelBBox:{x:1155,y:298,width:119,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@16"},{id:"step-18",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete AppInstance (Runner)",points:[[1759,294],[1855,294],[1971,291],[2075,284],[2091,283],[2108,282],[2125,280]],labelBBox:{x:1856,y:252,width:215,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@17"},{id:"step-19",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete App (Runner)",points:[[1759,350],[1856,369],[1972,381],[2075,358],[2092,355],[2109,350],[2126,344]],labelBBox:{x:1883,y:326,width:161,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@18"}]},forgejoGarmArchitecture:{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/garm-arch.c4",description:{txt:"Deployment architecture showing GARM orchestrating ephemeral runners on Edge Connect for Forgejo Actions"},title:"Architecture of Forgejo, Garm and Edge Connect",id:"forgejoGarmArchitecture",autoLayout:{direction:"TB"},hash:"b15c1909d7caa6a80c1a7e432ba68166130b8498",bounds:{x:0,y:0,width:1510,height:1457},nodes:[{id:"otcKubernetes",parent:null,level:0,children:["otcKubernetes.edpCluster"],inEdges:["16jincy","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes",title:"OTC Kubernetes",kind:"environment",technology:"Kubernetes",color:"blue",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine hosting EDP platform"},tags:[],style:{opacity:15,size:"md"},depth:2,x:8,y:8,width:996,height:1441,labelBBox:{x:6,y:0,width:106,height:15}},{id:"otcKubernetes.edpCluster",parent:"otcKubernetes",level:1,children:["otcKubernetes.edpCluster.forgejoActions","otcKubernetes.edpCluster.garmService","otcKubernetes.edpCluster.forgejo","otcKubernetes.edpCluster.providerEdgeConnect"],inEdges:["16jincy","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes.edpCluster",title:"EDP Cluster",kind:"cluster",color:"primary",shape:"rectangle",description:{txt:"EDP platform cluster"},tags:[],style:{opacity:15,size:"md"},depth:1,x:40,y:61,width:932,height:1356,labelBBox:{x:6,y:0,width:82,height:15}},{id:"otcKubernetes.edpCluster.forgejoActions",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["9r08on"],outEdges:["dvpbhz"],kind:"instance",title:"Forgejo Actions",description:{txt:"CI/CD orchestration for Forgejo"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejoActions",modelRef:"edp.forgejoActions",x:590,y:132,width:332,height:180,labelBBox:{x:46,y:54,width:270,height:67}},{id:"edgeConnectEnv",parent:null,level:0,children:["edgeConnectEnv.runnerInfrastructure"],inEdges:["dvpbhz"],outEdges:["16jincy","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv",title:"Edge Connect",kind:"environment",technology:"Edge Connect Platform",color:"green",shape:"rectangle",modelRef:"forgejoRunner",icon:"tech:docker",description:{txt:"Edge infrastructure for ephemeral runner deployment"},tags:[],style:{opacity:15,size:"md"},depth:2,x:1054,y:408,width:448,height:351,labelBBox:{x:6,y:0,width:93,height:15}},{id:"edgeConnectEnv.runnerInfrastructure",parent:"edgeConnectEnv",level:1,children:["edgeConnectEnv.runnerInfrastructure.forgejoRunner"],inEdges:["dvpbhz"],outEdges:["16jincy","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv.runnerInfrastructure",title:"Runner Infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Dynamically provisioned runner instances"},tags:[],style:{opacity:15,size:"md"},depth:1,x:1086,y:461,width:384,height:266,labelBBox:{x:6,y:0,width:156,height:15}},{id:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",parent:"edgeConnectEnv.runnerInfrastructure",level:2,children:[],inEdges:["dvpbhz"],outEdges:["16jincy","gly1kq","9r08on"],kind:"instance",title:"Forgejo Runner",description:{txt:"Ephemeral Forgejo Actions runner"},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:1118,y:515,width:320,height:180,labelBBox:{x:44,y:63,width:232,height:47}},{id:"otcKubernetes.edpCluster.garmService",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["16jincy"],outEdges:["su6mp0"],kind:"instance",title:"Garm",description:{txt:"GARM - Runner lifecycle manager"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.garmService",modelRef:"edp.garm.garm",x:90,y:854,width:352,height:180,labelBBox:{x:46,y:63,width:290,height:48}},{id:"otcKubernetes.edpCluster.forgejo",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["gly1kq"],outEdges:[],kind:"instance",title:"Forgejo",description:{txt:"Forgejo - Git platform with Actions"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:572,y:854,width:350,height:180,labelBBox:{x:46,y:54,width:288,height:67}},{id:"otcKubernetes.edpCluster.providerEdgeConnect",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["su6mp0"],outEdges:[],kind:"instance",title:"Garm Provider for EdgeConnect",description:{txt:"GARM Provider for Edge Connect"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.providerEdgeConnect",modelRef:"edp.garm.providerEdgeConnect",x:90,y:1187,width:409,height:180,labelBBox:{x:46,y:63,width:348,height:48}}],edges:[{id:"su6mp0",source:"otcKubernetes.edpCluster.garmService",target:"otcKubernetes.edpCluster.providerEdgeConnect",label:"calls binary",points:[[274,1034],[278,1078],[282,1131],[286,1177]],labelBBox:{x:282,y:1099,width:74,height:18},parent:"otcKubernetes.edpCluster",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal"},{id:"dvpbhz",source:"otcKubernetes.edpCluster.forgejoActions",target:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",label:"runs workflows",points:[[922,292],[985,323],[1056,362],[1114,408],[1149,436],[1182,473],[1209,507]],labelBBox:{x:1098,y:377,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"16jincy",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.garmService",label:"retrieves bootstrap information",points:[[1202,695],[1176,719],[1146,743],[1114,759],[869,878],[771,785],[507,854],[489,859],[470,865],[452,871]],labelBBox:{x:1086,y:766,width:193,height:18},parent:null,relations:["1t1b56a"],color:"gray",line:"dashed",head:"normal"},{id:"gly1kq",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejo",label:"registers with and picks up jobs",points:[[1192,694],[1168,717],[1141,740],[1114,759],[1057,798],[991,834],[931,863]],labelBBox:{x:1097,y:766,width:199,height:18},parent:null,relations:["1k6h7jf"],color:"gray",line:"dashed",head:"normal"},{id:"9r08on",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejoActions",label:"register",points:[[1211,515],[1183,480],[1149,441],[1114,408],[1062,359],[994,320],[931,290]],labelBBox:{x:1099,y:377,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"view_gitops-inner-outer-loop_15":{_type:"dynamic",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/gitops-inner-outer-loop.c4",description:null,title:"outer-ci-loop",id:"view_gitops-inner-outer-loop_15",variant:"diagram",autoLayout:{direction:"LR"},hash:"d85bdffdca5f49220457db75761ae8ba47744c16",sequenceLayout:{actors:[{id:"localbox.git",x:32,y:52,width:320,height:180,ports:[{id:"step-01_source",cx:160,cy:338,height:40,type:"source",position:"right"}]},{id:"edp.forgejogit",x:448,y:52,width:320,height:180,ports:[{id:"step-01_target",cx:160,cy:338,height:24,type:"target",position:"left"},{id:"step-02_source",cx:160,cy:360,height:40,type:"source",position:"right"},{id:"step-04_target",cx:160,cy:475,height:24,type:"target",position:"right"},{id:"step-05_source",cx:160,cy:568,height:40,type:"source",position:"right"}]},{id:"forgejoRunner",x:832,y:52,width:320,height:180,ports:[{id:"step-02_target",cx:160,cy:360,height:24,type:"target",position:"left"},{id:"step-03_source",cx:160,cy:382,height:40,type:"source",position:"right"},{id:"step-04_source",cx:160,cy:475,height:40,type:"source",position:"left"}]},{id:"edp.imageregistry",x:1216,y:52,width:373,height:180,ports:[{id:"step-03_target",cx:187,cy:382,height:24,type:"target",position:"left"},{id:"step-07_target",cx:187,cy:683,height:24,type:"target",position:"right"}]},{id:"edp.argoCD",x:1649,y:52,width:320,height:180,ports:[{id:"step-05_target",cx:160,cy:568,height:24,type:"target",position:"left"},{id:"step-06_source",cx:160,cy:590,height:40,type:"source",position:"right"}]},{id:"cloud",x:2033,y:52,width:320,height:180,ports:[{id:"step-06_target",cx:160,cy:590,height:24,type:"target",position:"left"},{id:"step-07_source",cx:160,cy:683,height:40,type:"source",position:"left"}]}],compounds:[{depth:0,x:0,y:0,width:384,height:527,id:"localbox",origin:"localbox"},{depth:0,x:416,y:0,width:384,height:735,id:"edp-1",origin:"edp"},{depth:0,x:1184,y:0,width:817,height:828,id:"edp-2",origin:"edp"}],steps:[{id:"step-01",sourceHandle:"step-01_source",targetHandle:"step-01_target",labelBBox:{width:91,height:27}},{id:"step-02",sourceHandle:"step-02_source",targetHandle:"step-02_target",labelBBox:{width:92,height:27}},{id:"step-03",sourceHandle:"step-03_source",targetHandle:"step-03_target",labelBBox:{width:159,height:27}},{id:"step-04",sourceHandle:"step-04_source",targetHandle:"step-04_target",labelBBox:{width:174,height:27}},{id:"step-05",sourceHandle:"step-05_source",targetHandle:"step-05_target",labelBBox:{width:164,height:27}},{id:"step-06",sourceHandle:"step-06_source",targetHandle:"step-06_target",labelBBox:{width:161,height:27}},{id:"step-07",sourceHandle:"step-07_source",targetHandle:"step-07_target",labelBBox:{width:113,height:27}}],parallelAreas:[],bounds:{x:0,y:0,width:2353,height:828}},bounds:{x:0,y:0,width:2150,height:1243},nodes:[{id:"localbox",parent:null,level:0,children:["localbox.git"],inEdges:[],outEdges:["step-01"],title:"localbox",modelRef:"localbox",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A local development system"},tags:[],technology:"Linux/Windows/Mac",kind:"system",depth:1,x:8,y:306,width:384,height:265,labelBBox:{x:6,y:0,width:66,height:15}},{id:"localbox.git",parent:"localbox",level:1,children:[],inEdges:[],outEdges:["step-01"],title:"git",modelRef:"localbox.git",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:15,size:"md"},description:{txt:"local git"},tags:[],technology:"Git",kind:"component",x:40,y:359,width:320,height:180,labelBBox:{x:119,y:53,width:113,height:67}},{id:"edp",parent:null,level:0,children:["edp.forgejogit","edp.imageregistry","edp.argoCD","edp.forgejo"],inEdges:["step-01","step-03","step-04","step-07"],outEdges:["step-02","step-06"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"secondary",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",depth:1,navigateTo:"edp",x:528,y:8,width:1064,height:861,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edp.forgejogit",parent:"edp",level:1,children:[],inEdges:["step-01","step-04"],outEdges:["step-02","step-05"],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"secondary",icon:"tech:git",style:{opacity:15,size:"md"},tags:[],kind:"component",x:595,y:359,width:320,height:180,labelBBox:{x:97,y:74,width:155,height:24}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-02"],outEdges:["step-03","step-04"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:1232,y:909,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"edp.imageregistry",parent:"edp",level:1,children:[],inEdges:["step-03","step-07"],outEdges:[],title:"Forgejo OCI Image Registry",modelRef:"edp.imageregistry",shape:"rectangle",color:"secondary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Container Image Registry"},tags:[],technology:"Golang",kind:"component",x:568,y:649,width:373,height:180,labelBBox:{x:46,y:53,width:311,height:67}},{id:"edp.argoCD",parent:"edp",level:1,children:[],inEdges:["step-05"],outEdges:["step-06"],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"secondary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:1232,y:495,width:320,height:180,labelBBox:{x:107,y:63,width:105,height:48}},{id:"cloud",parent:null,level:0,children:[],inEdges:["step-06"],outEdges:["step-07"],title:"Cloud",modelRef:"cloud",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Cloud environments"},tags:[],technology:"IaaS/PaaS",kind:"system",x:1830,y:1063,width:320,height:180,labelBBox:{x:91,y:53,width:137,height:67}},{id:"edp.forgejo",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"gray",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform +and security scanning`},tags:[],technology:"Golang",kind:"container",isCustomized:!0,navigateTo:"forgejo",x:48,y:553,width:340,height:180,labelBBox:{x:46,y:17,width:279,height:139}},{id:"edp.garm",parent:"edp",level:1,children:["edp.garm.garm","edp.garm.providerEdgeConnect"],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-03","step-04","step-07","step-09","step-18","step-19"],title:"Garm Image",modelRef:"edp.garm",shape:"rectangle",color:"primary",icon:"tech:docker",style:{opacity:20,size:"md"},tags:[],kind:"container",depth:1,x:709,y:142,width:1090,height:404,labelBBox:{x:6,y:0,width:77,height:15}},{id:"edp.garm.garm",parent:"edp.garm",level:2,children:[],inEdges:["step-01","step-06","step-08","step-16"],outEdges:["step-02","step-07","step-09","step-17"],title:"Garm",modelRef:"edp.garm.garm",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Provisions runners for Forgejo"},tags:[],kind:"component",x:749,y:316,width:325,height:180,labelBBox:{x:47,y:63,width:262,height:47}},{id:"edp.garm.providerEdgeConnect",parent:"edp.garm",level:2,children:[],inEdges:["step-02","step-17"],outEdges:["step-03","step-04","step-18","step-19"],title:"Garm Provider for EdgeConnect",modelRef:"edp.garm.providerEdgeConnect",shape:"rectangle",color:"primary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Acts as abstraction layer for EdgeConnect"},tags:[],kind:"component",x:1349,y:203,width:409,height:180,labelBBox:{x:47,y:54,width:347,height:65}},{id:"edgeConnect",parent:null,level:0,children:[],inEdges:["step-03","step-04","step-18","step-19"],outEdges:["step-05"],title:"EdgeConnect Cloud",modelRef:"edgeConnect",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Provides an API and control plane to run applications on the edge"},tags:[],kind:"system",x:2135,y:169,width:320,height:180,labelBBox:{x:24,y:54,width:273,height:65}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-05","step-09","step-12","step-15"],outEdges:["step-06","step-10","step-11","step-12","step-13","step-15"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:2665,y:810,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:101}}],edges:[{id:"step-01",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A new job is pending",points:[[389,687],[482,703],[596,707],[689,664],[761,631],[818,563],[857,504]],labelBBox:{x:458,y:632,width:228,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@0"},{id:"step-02",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Create new runner",points:[[1074,428],[1142,433],[1220,433],[1289,417],[1321,410],[1352,399],[1383,387]],labelBBox:{x:1144,y:385,width:141,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@1"},{id:"step-03",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create App (Runner)",points:[[1639,203],[1692,152],[1767,92],[1847,65],[1943,32],[1980,29],[2075,65],[2128,85],[2176,124],[2214,162]],labelBBox:{x:1886,y:7,width:156,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@2"},{id:"step-04",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Create AppInstance (Runner)",points:[[1759,234],[1788,228],[1818,222],[1847,219],[1948,206],[1974,210],[2075,219],[2091,220],[2108,222],[2125,225]],labelBBox:{x:1859,y:178,width:209,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@3"},{id:"step-05",source:"edgeConnect",target:"forgejoRunner",label:"Deploys",points:[[2448,349],[2502,386],[2560,432],[2605,484],[2687,579],[2750,711],[2787,800]],labelBBox:{x:2524,y:372,width:77,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@4"},{id:"step-06",source:"forgejoRunner",target:"edp.garm.garm",label:"Get runner registration token",points:[[1084,448],[1101,452],[1118,455],[1134,459],[1784,591],[2007,420],[2605,706],[2657,731],[2706,772],[2745,810]],labelBBox:{x:1862,y:491,width:204,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@5"},{id:"step-07",source:"edp.garm.garm",target:"edp.forgejo",label:"Get runner registration token",points:[[399,600],[488,577],[595,546],[689,510],[709,503],[730,495],[750,486]],labelBBox:{x:470,y:478,width:204,height:19},dir:"back",parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@6"},{id:"step-08",source:"edp.forgejo",target:"edp.garm.garm",label:"Token",points:[[300,553],[341,514],[393,472],[449,449],[540,410],[650,399],[739,397]],labelBBox:{x:539,y:368,width:65,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@7"},{id:"step-09",source:"edp.garm.garm",target:"forgejoRunner",label:"Token",points:[[1074,487],[1094,496],[1115,504],[1134,511],[1676,699],[2346,822],[2654,873]],labelBBox:{x:1931,y:682,width:65,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@8"},{id:"step-10",source:"forgejoRunner",target:"edp.forgejo",label:"Register runner",points:[[399,713],[415,718],[432,722],[449,726],[1184,886],[1385,807],[2135,865],[2304,878],[2346,883],[2515,892],[2564,894],[2617,896],[2665,897]],labelBBox:{x:1492,y:803,width:129,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@9"},{id:"step-11",source:"forgejoRunner",target:"edp.forgejo",label:"Fetch job",points:[[272,741],[371,914],[606,1253],[911,1253],[911,1253],[911,1253],[2296,1253],[2485,1253],[2658,1094],[2751,990]],labelBBox:{x:1511,y:1220,width:92,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@10"},{id:"step-12",source:"forgejoRunner",target:"forgejoRunner",label:"Work on job",points:[[2802,810],[2796,753],[2804,700],[2825,700],[2845,700],[2852,747],[2849,799]],labelBBox:{x:2773,y:667,width:109,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@11"},{id:"step-13",source:"forgejoRunner",target:"edp.forgejo",label:"Send result",points:[[240,743],[268,866],[332,1075],[449,1217],[604,1404],[667,1512],[911,1512],[911,1512],[911,1512],[2296,1512],[2568,1512],[2731,1160],[2794,990]],labelBBox:{x:1505,y:1479,width:104,height:19},dir:"back",parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@12"},{id:"step-14",source:"edp.forgejo",target:"edp.forgejo",label:"Deregister Runner",points:[[157,553],[142,496],[163,443],[218,443],[271,443],[292,490],[282,542]],labelBBox:{x:147,y:410,width:148,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@13"},{id:"step-15",source:"forgejoRunner",target:"forgejoRunner",label:"Terminate",points:[[2788,810],[2763,708],[2775,590],[2825,590],[2873,590],[2886,700],[2864,800]],labelBBox:{x:2779,y:557,width:97,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@14"},{id:"step-16",source:"edp.forgejo",target:"edp.garm.garm",label:"(Webhook) A job finished",points:[[258,553],[295,479],[358,379],[449,334],[538,289],[649,304],[740,332]],labelBBox:{x:477,y:273,width:189,height:19},parent:"edp",relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@15"},{id:"step-17",source:"edp.garm.garm",target:"edp.garm.providerEdgeConnect",label:"Delete runner",points:[[1074,368],[1094,363],[1115,359],[1134,356],[1201,343],[1274,332],[1340,322]],labelBBox:{x:1155,y:298,width:119,height:19},parent:"edp.garm",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@16"},{id:"step-18",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete AppInstance (Runner)",points:[[1759,294],[1855,294],[1971,291],[2075,284],[2091,283],[2108,282],[2125,280]],labelBBox:{x:1856,y:252,width:215,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@17"},{id:"step-19",source:"edp.garm.providerEdgeConnect",target:"edgeConnect",label:"Delete App (Runner)",points:[[1759,350],[1856,369],[1972,381],[2075,358],[2092,355],[2109,350],[2126,344]],labelBBox:{x:1883,y:326,width:161,height:19},parent:null,relations:[],color:"gray",line:"dashed",head:"normal",tags:[],astPath:"/steps@18"}]},forgejoGarmArchitecture:{_type:"deployment",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/garm-arch.c4",description:{txt:"Deployment architecture showing GARM orchestrating ephemeral runners on Edge Connect for Forgejo Actions"},title:"Architecture of Forgejo, Garm and Edge Connect",id:"forgejoGarmArchitecture",autoLayout:{direction:"TB"},hash:"c704c24d8449d144021a9ce47b0047cf36a1a865",bounds:{x:0,y:0,width:1588,height:1521},nodes:[{id:"otcKubernetes",parent:null,level:0,children:["otcKubernetes.edpCluster"],inEdges:["ldqgs7","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes",title:"OTC Kubernetes",kind:"environment",technology:"Kubernetes",color:"blue",shape:"rectangle",icon:"tech:kubernetes",description:{txt:"OTC Container Cluster Engine hosting EDP platform"},tags:[],style:{opacity:15,size:"md"},depth:3,x:8,y:8,width:1074,height:1505,labelBBox:{x:6,y:0,width:106,height:15}},{id:"otcKubernetes.edpCluster",parent:"otcKubernetes",level:1,children:["otcKubernetes.edpCluster.forgejoActions","otcKubernetes.edpCluster.edpCluster","otcKubernetes.edpCluster.forgejo"],inEdges:["ldqgs7","gly1kq","9r08on"],outEdges:["dvpbhz"],deploymentRef:"otcKubernetes.edpCluster",title:"EDP Cluster",kind:"cluster",color:"primary",shape:"rectangle",description:{txt:"EDP platform cluster"},tags:[],style:{opacity:15,size:"md"},depth:2,x:40,y:61,width:1010,height:1420,labelBBox:{x:6,y:0,width:82,height:15}},{id:"otcKubernetes.edpCluster.forgejoActions",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["9r08on"],outEdges:["dvpbhz"],kind:"instance",title:"Forgejo Actions",description:{txt:"CI/CD orchestration for Forgejo"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejoActions",modelRef:"edp.forgejoActions",x:668,y:132,width:332,height:180,labelBBox:{x:46,y:54,width:270,height:67}},{id:"edgeConnectEnv",parent:null,level:0,children:["edgeConnectEnv.runnerInfrastructure"],inEdges:["dvpbhz"],outEdges:["ldqgs7","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv",title:"Edge Connect",kind:"environment",technology:"Edge Connect Platform",color:"green",shape:"rectangle",modelRef:"forgejoRunner",icon:"tech:docker",description:{txt:"Edge infrastructure for ephemeral runner deployment"},tags:[],style:{opacity:15,size:"md"},depth:2,x:1132,y:408,width:448,height:351,labelBBox:{x:6,y:0,width:93,height:15}},{id:"edgeConnectEnv.runnerInfrastructure",parent:"edgeConnectEnv",level:1,children:["edgeConnectEnv.runnerInfrastructure.forgejoRunner"],inEdges:["dvpbhz"],outEdges:["ldqgs7","gly1kq","9r08on"],deploymentRef:"edgeConnectEnv.runnerInfrastructure",title:"Runner Infrastructure",kind:"computeressource",color:"primary",shape:"rectangle",modelRef:"forgejoRunner",description:{txt:"Dynamically provisioned runner instances"},tags:[],style:{opacity:15,size:"md"},depth:1,x:1164,y:461,width:384,height:266,labelBBox:{x:6,y:0,width:156,height:15}},{id:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",parent:"edgeConnectEnv.runnerInfrastructure",level:2,children:[],inEdges:["dvpbhz"],outEdges:["ldqgs7","gly1kq","9r08on"],kind:"instance",title:"Forgejo Runner",description:{txt:"Ephemeral Forgejo Actions runner"},tags:[],color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",modelRef:"forgejoRunner",x:1196,y:515,width:320,height:180,labelBBox:{x:44,y:63,width:232,height:47}},{id:"otcKubernetes.edpCluster.edpCluster",parent:"otcKubernetes.edpCluster",level:2,children:["otcKubernetes.edpCluster.edpCluster.garmService","otcKubernetes.edpCluster.edpCluster.providerEdgeConnect"],inEdges:["ldqgs7"],outEdges:[],deploymentRef:"otcKubernetes.edpCluster.edpCluster",title:"GARM pod",kind:"environment",technology:"Kubernetes",color:"primary",shape:"rectangle",tags:[],style:{opacity:15,size:"md"},depth:1,x:90,y:797,width:510,height:634,labelBBox:{x:6,y:0,width:65,height:15}},{id:"otcKubernetes.edpCluster.edpCluster.garmService",parent:"otcKubernetes.edpCluster.edpCluster",level:3,children:[],inEdges:["ldqgs7"],outEdges:["9d8wuc"],kind:"instance",title:"Garm",description:{txt:"GARM - Runner lifecycle manager"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.edpCluster.garmService",modelRef:"edp.garm.garm",x:168,y:869,width:352,height:180,labelBBox:{x:46,y:63,width:290,height:47}},{id:"otcKubernetes.edpCluster.forgejo",parent:"otcKubernetes.edpCluster",level:2,children:[],inEdges:["gly1kq"],outEdges:[],kind:"instance",title:"Forgejo",description:{txt:"Forgejo - Git platform with Actions"},technology:"Golang",tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:20,size:"md"},deploymentRef:"otcKubernetes.edpCluster.forgejo",modelRef:"edp.forgejo",navigateTo:"forgejo",x:650,y:869,width:350,height:180,labelBBox:{x:46,y:53,width:288,height:67}},{id:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",parent:"otcKubernetes.edpCluster.edpCluster",level:3,children:[],inEdges:["9d8wuc"],outEdges:[],kind:"instance",title:"Garm Provider for EdgeConnect",description:{txt:"GARM Provider for Edge Connect"},tags:[],icon:"tech:go",color:"primary",shape:"rectangle",style:{opacity:15,size:"md"},deploymentRef:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",modelRef:"edp.garm.providerEdgeConnect",x:140,y:1201,width:409,height:180,labelBBox:{x:46,y:63,width:348,height:48}}],edges:[{id:"9d8wuc",source:"otcKubernetes.edpCluster.edpCluster.garmService",target:"otcKubernetes.edpCluster.edpCluster.providerEdgeConnect",label:"calls binary",points:[[344,1048],[344,1092],[345,1146],[345,1191]],labelBBox:{x:346,y:1113,width:74,height:18},parent:"otcKubernetes.edpCluster.edpCluster",relations:["1olxwwi"],color:"gray",line:"dashed",head:"normal"},{id:"dvpbhz",source:"otcKubernetes.edpCluster.forgejoActions",target:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",label:"runs workflows",points:[[1e3,292],[1063,323],[1134,362],[1192,408],[1227,436],[1260,473],[1287,507]],labelBBox:{x:1176,y:377,width:97,height:18},parent:null,relations:["1pbc22f"],color:"gray",line:"dashed",head:"normal"},{id:"ldqgs7",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.edpCluster.garmService",label:"retrieves bootstrap information",points:[[1283,695],[1257,720],[1226,744],[1192,759],[1055,817],[661,741],[524,797],[489,812],[456,836],[429,861]],labelBBox:{x:1166,y:766,width:193,height:18},parent:null,relations:["15ss7lz"],color:"gray",line:"dashed",head:"normal"},{id:"gly1kq",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejo",label:"registers with and picks up jobs",points:[[1269,695],[1245,717],[1218,740],[1192,759],[1135,799],[1069,838],[1009,870]],labelBBox:{x:1175,y:766,width:199,height:18},parent:null,relations:["1k6h7jf"],color:"gray",line:"dashed",head:"normal"},{id:"9r08on",source:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",target:"otcKubernetes.edpCluster.forgejoActions",label:"register",points:[[1289,515],[1261,480],[1227,441],[1192,408],[1140,359],[1072,320],[1009,290]],labelBBox:{x:1177,y:377,width:51,height:18},parent:null,relations:["18dtot7"],color:"gray",line:"dashed",head:"normal"}]},"view_gitops-inner-outer-loop_15":{_type:"dynamic",tags:null,links:null,_stage:"layouted",sourcePath:"views/dynamic/cicd/gitops-inner-outer-loop.c4",description:null,title:"outer-ci-loop",id:"view_gitops-inner-outer-loop_15",variant:"diagram",autoLayout:{direction:"LR"},hash:"d85bdffdca5f49220457db75761ae8ba47744c16",sequenceLayout:{actors:[{id:"localbox.git",x:32,y:52,width:320,height:180,ports:[{id:"step-01_source",cx:160,cy:338,height:40,type:"source",position:"right"}]},{id:"edp.forgejogit",x:448,y:52,width:320,height:180,ports:[{id:"step-01_target",cx:160,cy:338,height:24,type:"target",position:"left"},{id:"step-02_source",cx:160,cy:360,height:40,type:"source",position:"right"},{id:"step-04_target",cx:160,cy:475,height:24,type:"target",position:"right"},{id:"step-05_source",cx:160,cy:568,height:40,type:"source",position:"right"}]},{id:"forgejoRunner",x:832,y:52,width:320,height:180,ports:[{id:"step-02_target",cx:160,cy:360,height:24,type:"target",position:"left"},{id:"step-03_source",cx:160,cy:382,height:40,type:"source",position:"right"},{id:"step-04_source",cx:160,cy:475,height:40,type:"source",position:"left"}]},{id:"edp.imageregistry",x:1216,y:52,width:373,height:180,ports:[{id:"step-03_target",cx:187,cy:382,height:24,type:"target",position:"left"},{id:"step-07_target",cx:187,cy:683,height:24,type:"target",position:"right"}]},{id:"edp.argoCD",x:1649,y:52,width:320,height:180,ports:[{id:"step-05_target",cx:160,cy:568,height:24,type:"target",position:"left"},{id:"step-06_source",cx:160,cy:590,height:40,type:"source",position:"right"}]},{id:"cloud",x:2033,y:52,width:320,height:180,ports:[{id:"step-06_target",cx:160,cy:590,height:24,type:"target",position:"left"},{id:"step-07_source",cx:160,cy:683,height:40,type:"source",position:"left"}]}],compounds:[{depth:0,x:0,y:0,width:384,height:527,id:"localbox",origin:"localbox"},{depth:0,x:416,y:0,width:384,height:735,id:"edp-1",origin:"edp"},{depth:0,x:1184,y:0,width:817,height:828,id:"edp-2",origin:"edp"}],steps:[{id:"step-01",sourceHandle:"step-01_source",targetHandle:"step-01_target",labelBBox:{width:91,height:27}},{id:"step-02",sourceHandle:"step-02_source",targetHandle:"step-02_target",labelBBox:{width:92,height:27}},{id:"step-03",sourceHandle:"step-03_source",targetHandle:"step-03_target",labelBBox:{width:159,height:27}},{id:"step-04",sourceHandle:"step-04_source",targetHandle:"step-04_target",labelBBox:{width:174,height:27}},{id:"step-05",sourceHandle:"step-05_source",targetHandle:"step-05_target",labelBBox:{width:164,height:27}},{id:"step-06",sourceHandle:"step-06_source",targetHandle:"step-06_target",labelBBox:{width:161,height:27}},{id:"step-07",sourceHandle:"step-07_source",targetHandle:"step-07_target",labelBBox:{width:113,height:27}}],parallelAreas:[],bounds:{x:0,y:0,width:2353,height:828}},bounds:{x:0,y:0,width:2150,height:1243},nodes:[{id:"localbox",parent:null,level:0,children:["localbox.git"],inEdges:[],outEdges:["step-01"],title:"localbox",modelRef:"localbox",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A local development system"},tags:[],technology:"Linux/Windows/Mac",kind:"system",depth:1,x:8,y:306,width:384,height:265,labelBBox:{x:6,y:0,width:66,height:15}},{id:"localbox.git",parent:"localbox",level:1,children:[],inEdges:[],outEdges:["step-01"],title:"git",modelRef:"localbox.git",shape:"rectangle",color:"primary",icon:"tech:git",style:{opacity:15,size:"md"},description:{txt:"local git"},tags:[],technology:"Git",kind:"component",x:40,y:359,width:320,height:180,labelBBox:{x:119,y:53,width:113,height:67}},{id:"edp",parent:null,level:0,children:["edp.forgejogit","edp.imageregistry","edp.argoCD","edp.forgejo"],inEdges:["step-01","step-03","step-04","step-07"],outEdges:["step-02","step-06"],title:"EDP",modelRef:"edp",shape:"rectangle",color:"secondary",icon:"tech:kubernetes",style:{opacity:15,size:"md"},description:{txt:"EDP Edge Development Platform"},tags:[],technology:"Kubernetes",kind:"system",depth:1,navigateTo:"edp",x:528,y:8,width:1064,height:861,labelBBox:{x:6,y:0,width:27,height:15}},{id:"edp.forgejogit",parent:"edp",level:1,children:[],inEdges:["step-01","step-04"],outEdges:["step-02","step-05"],title:"ForgejoGit",modelRef:"edp.forgejogit",shape:"rectangle",color:"secondary",icon:"tech:git",style:{opacity:15,size:"md"},tags:[],kind:"component",x:595,y:359,width:320,height:180,labelBBox:{x:97,y:74,width:155,height:24}},{id:"forgejoRunner",parent:null,level:0,children:[],inEdges:["step-02"],outEdges:["step-03","step-04"],title:"Forgejo Runner",modelRef:"forgejoRunner",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"A runner is a service that runs jobs triggered by Forgejo. A runner can have different technical implementations like a container or a VM."},tags:[],kind:"component",x:1232,y:909,width:320,height:180,labelBBox:{x:23,y:36,width:274,height:102}},{id:"edp.imageregistry",parent:"edp",level:1,children:[],inEdges:["step-03","step-07"],outEdges:[],title:"Forgejo OCI Image Registry",modelRef:"edp.imageregistry",shape:"rectangle",color:"secondary",icon:"tech:go",style:{opacity:15,size:"md"},description:{txt:"Container Image Registry"},tags:[],technology:"Golang",kind:"component",x:568,y:649,width:373,height:180,labelBBox:{x:46,y:53,width:311,height:67}},{id:"edp.argoCD",parent:"edp",level:1,children:[],inEdges:["step-05"],outEdges:["step-06"],title:"ArgoCD",modelRef:"edp.argoCD",shape:"rectangle",color:"secondary",style:{opacity:20,size:"md"},description:{txt:"GitOps Service"},tags:[],kind:"container",navigateTo:"argoCD",x:1232,y:495,width:320,height:180,labelBBox:{x:107,y:63,width:105,height:48}},{id:"cloud",parent:null,level:0,children:[],inEdges:["step-06"],outEdges:["step-07"],title:"Cloud",modelRef:"cloud",shape:"rectangle",color:"primary",style:{opacity:15,size:"md"},description:{txt:"Cloud environments"},tags:[],technology:"IaaS/PaaS",kind:"system",x:1830,y:1063,width:320,height:180,labelBBox:{x:91,y:53,width:137,height:67}},{id:"edp.forgejo",parent:"edp",level:1,children:[],inEdges:[],outEdges:[],title:"Forgejo",modelRef:"edp.forgejo",shape:"rectangle",color:"gray",icon:"tech:go",style:{opacity:20,size:"md"},description:{txt:`Fully managed DevOps Platform offering capabilities like code version controling collaboration and ticketing @@ -298,7 +298,7 @@ and correctness.`},tags:[],technology:"PostgreSQL",kind:"container",x:859,y:0,wi This is kubernetes clusters and other infrastructure like nodes and vms, and platform services. All is set up by IaC-pipelines in the Foundry.`},technology:"OTC",title:"OTC EDP per tenant cluster",id:"otc-edp-per-tenant"},"otc-faas":{style:{},kind:"cloud",description:{txt:"OTC environments for Prototype FaaS."},technology:"OTC",title:"OTC prototype FaaS",id:"otc-faas"},edge:{style:{},kind:"cloud",description:{txt:"Edge environments for distributed workloads."},technology:"Edge",title:"Edge Cloud",id:"edge"},"otc-edpFoundry":{style:{},kind:"cloud",description:{txt:`OTC environments for the central EDP Foundry services. This is kubernetes clusters and other infrastructure like nodes and vms, and optionally platform services. All is set up by IaC terraform and edpbuilder. A tenant is a folder in Foundry-Config-Forgejo. On merge triggers reconciliation to EDP. -Optionally we will have a WebUI/API/CLI`},technology:"OTC",title:"OTC EDP Foundry Central Service clusters",id:"otc-edpFoundry"},edgeProvider:{style:{icon:"tech:terraform"},kind:"paas",description:{txt:"Unlocks the terraform ecosystem"},title:"Terraform Edge provider",id:"edgeProvider"},edgeProviderHost:{style:{},kind:"environment",title:"OTC",id:"edgeProviderHost"},edgeSdk:{style:{icon:"tech:go"},kind:"paas",description:{txt:"Wrapper around API"},technology:"Cloud Services",title:"Edge Cloud SDK",id:"edgeSdk"},edgeCloud:{style:{},kind:"environment",title:"Edge cloud",id:"edgeCloud"},otcTenantProd:{style:{},kind:"environment",title:"Prod - builth.ing",id:"otcTenantProd"},otcTenantNonProd:{style:{},kind:"environment",title:"Non-Prod - t09.de",id:"otcTenantNonProd"},otcKubernetes:{style:{icon:"tech:kubernetes"},kind:"environment",description:{txt:"OTC Container Cluster Engine hosting EDP platform"},technology:"Kubernetes",title:"OTC Kubernetes",id:"otcKubernetes"},edgeConnectEnv:{style:{icon:"tech:docker"},kind:"environment",description:{txt:"Edge infrastructure for ephemeral runner deployment"},technology:"Edge Connect Platform",title:"Edge Connect",id:"edgeConnectEnv"},"local.backstage":{style:{},kind:"namespace",title:"backstage",id:"local.backstage"},"local.argocd":{style:{},kind:"namespace",title:"argocd",id:"local.argocd"},"local.gitea":{style:{},kind:"namespace",title:"gitea",id:"local.gitea"},"local.keycloak":{style:{},kind:"namespace",title:"keycloak",id:"local.keycloak"},"local.crossplane":{style:{},kind:"namespace",title:"crossplane-system",id:"local.crossplane"},"local.externalSecrets":{style:{},kind:"namespace",title:"external-secrets",id:"local.externalSecrets"},"local.velero":{style:{},kind:"namespace",title:"velero",id:"local.velero"},"local.minio":{style:{},kind:"namespace",title:"minio-backup",id:"local.minio"},"local.monitoring":{style:{},kind:"namespace",title:"monitoring",id:"local.monitoring"},"local.ingressNginx":{style:{},kind:"namespace",title:"ingress-nginx",id:"local.ingressNginx"},"local.openbao":{style:{},kind:"namespace",title:"openbao",id:"local.openbao"},"local.fibonacci":{style:{},kind:"namespace",title:"fibonacci-app",id:"local.fibonacci"},"local.mailhog":{style:{},kind:"namespace",title:"mailhog",id:"local.mailhog"},"local.spark":{style:{},kind:"namespace",title:"spark",id:"local.spark"},"otc-edp-per-tenant.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"OTC Container Cluster Engine"},technology:"Kubernetes",title:"OTC CCE",id:"otc-edp-per-tenant.cce"},"otc-edp-per-tenant.cloudServices":{style:{},kind:"paas",description:{txt:"EDP Cloud Services"},technology:"Cloud Services",title:"EDP Cloud Services",id:"otc-edp-per-tenant.cloudServices"},"otc-edp-per-tenant.forgejoRunnerInfrastructure":{style:{},kind:"computeressource",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},title:"EDP ForgejoRunner infrastructure",id:"otc-edp-per-tenant.forgejoRunnerInfrastructure"},"otc-faas.dev":{style:{},kind:"environment",description:{txt:"*.t09.de"},technology:"OTC",title:"tenant Dev",id:"otc-faas.dev"},"otc-faas.prod":{style:{},kind:"environment",description:{txt:"*.buildth.ing"},technology:"OTC",title:"Tenant Prod",id:"otc-faas.prod"},"edge.edge-dev":{style:{},kind:"environment",description:{txt:"Edge development environment"},technology:"Edge",title:"Edge Dev",id:"edge.edge-dev"},"edge.edge-prod":{style:{},kind:"environment",description:{txt:"Edge production environment"},technology:"Edge",title:"Edge Prod",id:"edge.edge-prod"},"otc-edpFoundry.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"OTC Container Cluster Engine"},technology:"Kubernetes",title:"OTC CCE",id:"otc-edpFoundry.cce"},"otc-edpFoundry.workflowSetupEDPInfrastructure":{style:{},kind:"computeressource",description:{txt:"EDP infrastructure Workflow"},title:"EDP infrastructure Workflow",id:"otc-edpFoundry.workflowSetupEDPInfrastructure"},"otc-edpFoundry.workflowSetupArgoCDInfrastructure":{style:{},kind:"computeressource",description:{txt:"EDP Setup ArgoCD Workflow"},title:"EDP ArgoCD Workflow",id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure"},"otc-edpFoundry.forgejoRunnerInfrastructure":{style:{},kind:"computeressource",description:{txt:"Infrastructure for Forgejo runners like pods, vms, lxds, etc"},title:"EDP ForgejoRunner infrastructure",id:"otc-edpFoundry.forgejoRunnerInfrastructure"},"edgeProviderHost.edp":{style:{icon:"tech:git"},kind:"cluster",title:"Forgejo for all EDP-tenants",id:"edgeProviderHost.edp"},"edgeProviderHost.terralist":{style:{icon:"tech:terraform"},kind:"paas",description:{txt:"Terraform provider private hosting"},technology:"Cloud Services",title:"Terralist",id:"edgeProviderHost.terralist"},"edgeCloud.edgeApi":{style:{icon:"tech:swagger"},kind:"paas",technology:"Edge Cloud (managed)",links:[{url:"https://swagger.edge.platform.mg3.mdb.osc.live",title:"Documentation"}],title:"Edge Cloud API",id:"edgeCloud.edgeApi"},"edgeCloud.edgeResources":{style:{},kind:"paas",description:{txt:"App, AppInstance, etc."},technology:"Edge Cloud (managed)",title:"Edge Cloud Resources",id:"edgeCloud.edgeResources"},"otcTenantProd.otcTenantEdpBuildthing":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Primary Instance"},title:"edp.builth.ing",id:"otcTenantProd.otcTenantEdpBuildthing"},"otcTenantProd.otcTenantObservability":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Observability Instance"},title:"observability.builth.ing",id:"otcTenantProd.otcTenantObservability"},"otcTenantProd.otcTenantCustomerA":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Customer Instance"},title:"customer-a.builth.ing",id:"otcTenantProd.otcTenantCustomerA"},"otcTenantNonProd.otcTenantDev1":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Development Instance"},title:"dev1.t09.de",id:"otcTenantNonProd.otcTenantDev1"},"otcTenantNonProd.otcTenantTestX":{style:{icon:"tech:git"},kind:"cluster",description:{txt:"Testing Instance"},title:"test-x.t09.de",id:"otcTenantNonProd.otcTenantTestX"},"otcKubernetes.edpCluster":{style:{},kind:"cluster",description:{txt:"EDP platform cluster"},title:"EDP Cluster",id:"otcKubernetes.edpCluster"},"edgeConnectEnv.runnerInfrastructure":{style:{},kind:"computeressource",description:{txt:"Dynamically provisioned runner instances"},title:"Runner Infrastructure",id:"edgeConnectEnv.runnerInfrastructure"},"local.backstage.backstage":{id:"local.backstage.backstage",element:"edp.ui.backstage",style:{}},"local.backstage.database":{id:"local.backstage.database",element:"edp.ui.database",style:{}},"local.argocd.argocdAppController":{id:"local.argocd.argocdAppController",element:"edp.argoCD.argocdAppController",style:{}},"local.argocd.argocdAppSetController":{id:"local.argocd.argocdAppSetController",element:"edp.argoCD.argocdAppSetController",style:{}},"local.argocd.argocdRedis":{id:"local.argocd.argocdRedis",element:"edp.argoCD.argocdRedis",style:{}},"local.argocd.argocdRepoServer":{id:"local.argocd.argocdRepoServer",element:"edp.argoCD.argocdRepoServer",style:{}},"local.argocd.argocdServer":{id:"local.argocd.argocdServer",element:"edp.argoCD.argocdServer",style:{}},"local.gitea.forgejo":{id:"local.gitea.forgejo",element:"edp.forgejo",style:{}},"local.gitea.forgejoRunner":{id:"local.gitea.forgejoRunner",element:"forgejoRunner",style:{}},"local.keycloak.keycloak":{id:"local.keycloak.keycloak",element:"edp.keycloak.keycloak",style:{}},"local.keycloak.keycloakDB":{id:"local.keycloak.keycloakDB",element:"edp.keycloak.keycloakDB",style:{}},"local.crossplane.crossplane":{id:"local.crossplane.crossplane",element:"edp.crossplane.crossplane",style:{}},"local.crossplane.crossplaneFunction":{id:"local.crossplane.crossplaneFunction",element:"edp.crossplane.crossplaneFunction",style:{}},"local.crossplane.crossplaneRbacManager":{id:"local.crossplane.crossplaneRbacManager",element:"edp.crossplane.crossplaneRbacManager",style:{}},"local.crossplane.providerArgoCD":{id:"local.crossplane.providerArgoCD",element:"edp.crossplane.providerArgoCD",style:{}},"local.crossplane.providerKind":{id:"local.crossplane.providerKind",element:"edp.crossplane.providerKind",style:{}},"local.crossplane.providerShell":{id:"local.crossplane.providerShell",element:"edp.crossplane.providerShell",style:{}},"local.externalSecrets.certController":{id:"local.externalSecrets.certController",element:"edp.externalSecrets.certController",style:{}},"local.externalSecrets.externalSecrets":{id:"local.externalSecrets.externalSecrets",element:"edp.externalSecrets.externalSecrets",style:{}},"local.externalSecrets.webhook":{id:"local.externalSecrets.webhook",element:"edp.externalSecrets.webhook",style:{}},"local.velero.velero":{id:"local.velero.velero",element:"edp.velero.velero",style:{}},"local.minio.minio":{id:"local.minio.minio",element:"edp.minio.minio",style:{}},"local.monitoring.alloy":{id:"local.monitoring.alloy",element:"edp.monitoring.alloy",style:{}},"local.monitoring.distributor":{id:"local.monitoring.distributor",element:"edp.monitoring.loki.distributor",style:{}},"local.monitoring.gateway":{id:"local.monitoring.gateway",element:"edp.monitoring.loki.gateway",style:{}},"local.monitoring.ingestor":{id:"local.monitoring.ingestor",element:"edp.monitoring.loki.ingestor",style:{}},"local.monitoring.querier":{id:"local.monitoring.querier",element:"edp.monitoring.loki.querier",style:{}},"local.monitoring.queryFrontend":{id:"local.monitoring.queryFrontend",element:"edp.monitoring.loki.queryFrontend",style:{}},"local.ingressNginx.ingressNginx":{id:"local.ingressNginx.ingressNginx",element:"edp.ingressNginx.ingressNginx",style:{}},"local.openbao.openbao":{id:"local.openbao.openbao",element:"edp.openbao.openbao",style:{}},"local.openbao.agentInjector":{id:"local.openbao.agentInjector",element:"edp.openbao.agentInjector",style:{}},"local.fibonacci.fibonacci":{id:"local.fibonacci.fibonacci",element:"edp.testApp.fibonacci",style:{}},"local.mailhog.mailhog":{id:"local.mailhog.mailhog",element:"edp.mailhog.mailhog",style:{}},"local.spark.sparkoperator":{id:"local.spark.sparkoperator",element:"edp.spark.sparkoperator",style:{}},"otc-edp-per-tenant.cce.edp":{style:{},kind:"cluster",title:"EDP",id:"otc-edp-per-tenant.cce.edp"},"otc-edp-per-tenant.cloudServices.postgres":{id:"otc-edp-per-tenant.cloudServices.postgres",element:"postgres",style:{}},"otc-edp-per-tenant.cloudServices.redis":{id:"otc-edp-per-tenant.cloudServices.redis",element:"redis",style:{}},"otc-edp-per-tenant.cloudServices.objectstorage":{id:"otc-edp-per-tenant.cloudServices.objectstorage",element:"objectstorage",style:{}},"otc-edp-per-tenant.cloudServices.elasticsearch":{id:"otc-edp-per-tenant.cloudServices.elasticsearch",element:"elasticsearch",style:{}},"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner":{id:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"otc-faas.dev.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.t09.de"},technology:"Kubernetes",title:"Central Forgejo",id:"otc-faas.dev.cce"},"otc-faas.dev.cloudServices":{style:{},kind:"paas",description:{txt:"EDP Cloud Services (Postgres, Redis, etc.)"},technology:"Cloud Services",title:"EDP Cloud Services",id:"otc-faas.dev.cloudServices"},"otc-faas.dev.observability":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.t09.de"},technology:"Kubernetes",title:"Observability",id:"otc-faas.dev.observability"},"otc-faas.prod.cce":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.buildth.ing"},technology:"Kubernetes",title:"Central Forgejo",id:"otc-faas.prod.cce"},"otc-faas.prod.cloudServices":{style:{},kind:"paas",description:{txt:"EDP Cloud Services (Postgres, Redis, etc.)"},technology:"Cloud Services",title:"EDP Cloud Services",id:"otc-faas.prod.cloudServices"},"otc-faas.prod.observability":{style:{icon:"tech:kubernetes"},kind:"kubernetes",description:{txt:"*.buildth.ing"},technology:"Kubernetes",title:"Observability",id:"otc-faas.prod.observability"},"otc-edpFoundry.cce.internalServices":{style:{},kind:"cluster",title:"EDP Foundry Internal Services",id:"otc-edpFoundry.cce.internalServices"},"otc-edpFoundry.cce.centralObservability":{style:{},kind:"cluster",title:"EDP Foundry Central Observability",id:"otc-edpFoundry.cce.centralObservability"},"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner":{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker":{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker",element:"forgejoRunnerWorker",style:{}},"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow":{id:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow",element:"edpworkflow",style:{}},"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner":{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker":{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker",element:"forgejoRunnerWorker",style:{}},"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow":{id:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow",element:"edpworkflow",style:{}},"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner":{id:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner",element:"forgejoRunner",style:{}},"edgeProviderHost.edp.forgejo":{id:"edgeProviderHost.edp.forgejo",element:"edp.forgejo",title:"Forgejo for all EDP-tenants",description:{txt:"edp.buildth.ing"},style:{}},"otcKubernetes.edpCluster.forgejo":{id:"otcKubernetes.edpCluster.forgejo",element:"edp.forgejo",description:{txt:"Forgejo - Git platform with Actions"},style:{}},"otcKubernetes.edpCluster.forgejoActions":{id:"otcKubernetes.edpCluster.forgejoActions",element:"edp.forgejoActions",description:{txt:"CI/CD orchestration for Forgejo"},style:{}},"otcKubernetes.edpCluster.garmContainer":{id:"otcKubernetes.edpCluster.garmContainer",element:"edp.garm",description:{txt:"GARM container with runner orchestration"},style:{}},"otcKubernetes.edpCluster.garmService":{id:"otcKubernetes.edpCluster.garmService",element:"edp.garm.garm",description:{txt:"GARM - Runner lifecycle manager"},style:{}},"otcKubernetes.edpCluster.providerEdgeConnect":{id:"otcKubernetes.edpCluster.providerEdgeConnect",element:"edp.garm.providerEdgeConnect",description:{txt:"GARM Provider for Edge Connect"},style:{}},"edgeConnectEnv.runnerInfrastructure.forgejoRunner":{id:"edgeConnectEnv.runnerInfrastructure.forgejoRunner",element:"forgejoRunner",description:{txt:"Ephemeral Forgejo Actions runner"},style:{}},"otc-edp-per-tenant.cce.edp.argoCD":{id:"otc-edp-per-tenant.cce.edp.argoCD",element:"edp.argoCD",style:{}},"otc-edp-per-tenant.cce.edp.forgejoRunner":{id:"otc-edp-per-tenant.cce.edp.forgejoRunner",element:"forgejoRunner",style:{}},"otc-edp-per-tenant.cce.edp.forgejo":{id:"otc-edp-per-tenant.cce.edp.forgejo",element:"edp.forgejo",style:{}},"otc-edp-per-tenant.cce.edp.externalSecrets":{id:"otc-edp-per-tenant.cce.edp.externalSecrets",element:"edp.externalSecrets",style:{}},"otc-edp-per-tenant.cce.edp.ingressNginx":{id:"otc-edp-per-tenant.cce.edp.ingressNginx",element:"edp.ingressNginx",style:{}},"otc-edp-per-tenant.cce.edp.garm":{id:"otc-edp-per-tenant.cce.edp.garm",element:"edp.garm",style:{}},"otc-faas.dev.cce.edp":{style:{},kind:"cluster",description:{txt:"t09.de"},title:"Forgejo Dev for platform team",id:"otc-faas.dev.cce.edp"},"otc-faas.prod.cce.edp":{style:{},kind:"cluster",title:"Forgejo for all EDP-tenants",id:"otc-faas.prod.cce.edp"},"otc-edpFoundry.cce.internalServices.argoCD":{id:"otc-edpFoundry.cce.internalServices.argoCD",element:"edp.argoCD",style:{}},"otc-edpFoundry.cce.internalServices.forgejo":{id:"otc-edpFoundry.cce.internalServices.forgejo",element:"edp.forgejo",style:{}},"otc-edpFoundry.cce.internalServices.externalSecrets":{id:"otc-edpFoundry.cce.internalServices.externalSecrets",element:"edp.externalSecrets",style:{}},"otc-edpFoundry.cce.internalServices.openbao":{id:"otc-edpFoundry.cce.internalServices.openbao",element:"edp.openbao",style:{}},"otc-edpFoundry.cce.internalServices.ingressNginx":{id:"otc-edpFoundry.cce.internalServices.ingressNginx",element:"edp.ingressNginx",style:{}},"otc-edpFoundry.cce.centralObservability.grafana":{id:"otc-edpFoundry.cce.centralObservability.grafana",element:"edp.grafana",style:{}},"otc-edpFoundry.cce.centralObservability.prometheus":{id:"otc-edpFoundry.cce.centralObservability.prometheus",element:"edp.prometheus",style:{}},"otc-edpFoundry.cce.centralObservability.loki":{id:"otc-edpFoundry.cce.centralObservability.loki",element:"edp.loki",style:{}},"otc-faas.dev.cce.edp.forgejo":{id:"otc-faas.dev.cce.edp.forgejo",element:"edp.forgejo",style:{}},"otc-faas.prod.cce.edp.forgejo":{id:"otc-faas.prod.cce.edp.forgejo",element:"edp.forgejo",title:"Forgejo for all EDP-tenants",description:{txt:"buildth.ing"},style:{}}},relations:{g9oj4f:{title:"registers",source:{deployment:"otc-edp-per-tenant.forgejoRunnerInfrastructure.forgejoRunner"},target:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},id:"g9oj4f"},"1fzhjm9":{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.elasticsearch"},id:"1fzhjm9"},"15njmlz":{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.objectstorage"},id:"15njmlz"},hks76r:{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.postgres"},id:"hks76r"},"1w18ve8":{source:{deployment:"otc-edp-per-tenant.cce.edp.forgejo"},target:{deployment:"otc-edp-per-tenant.cloudServices.redis"},id:"1w18ve8"},dz2rdn:{source:{deployment:"otc-faas.dev.cce.edp.forgejo"},target:{deployment:"otc-faas.dev.cloudServices"},id:"dz2rdn"},"2shw6y":{source:{deployment:"otc-faas.prod.cce.edp.forgejo"},target:{deployment:"otc-faas.prod.cloudServices"},id:"2shw6y"},"7kqly3":{title:"runs",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner"},target:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker"},id:"7kqly3"},"12hf1w4":{title:"executes",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunnerWorker"},target:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"},id:"12hf1w4"},uk77s5:{title:"deploys edp to otc.cce",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"},target:{deployment:"otc-edp-per-tenant.cce.edp"},id:"uk77s5"},"1pfc6bl":{title:"deploys edp to otc.paas",source:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.edpworkflow"},target:{deployment:"otc-edp-per-tenant.cloudServices"},id:"1pfc6bl"},hqie0:{title:"runs",source:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner"},target:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker"},id:"hqie0"},"1j16hqv":{title:"executes",source:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunnerWorker"},target:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow"},id:"1j16hqv"},jde35l:{source:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.edpworkflow"},target:{deployment:"otc-edp-per-tenant.cce.edp.argoCD"},id:"jde35l"},"1umzqdy":{title:"registers",source:{deployment:"otc-edpFoundry.forgejoRunnerInfrastructure.forgejoRunner"},target:{deployment:"otc-edpFoundry.cce.internalServices.forgejo"},id:"1umzqdy"},dola40:{title:"invokes",source:{deployment:"otc-edpFoundry.cce.internalServices.forgejo"},target:{deployment:"otc-edpFoundry.workflowSetupEDPInfrastructure.forgejoRunner"},id:"dola40"},"1f5y9gc":{title:"invokes",source:{deployment:"otc-edpFoundry.cce.internalServices.forgejo"},target:{deployment:"otc-edpFoundry.workflowSetupArgoCDInfrastructure.forgejoRunner"},id:"1f5y9gc"},"1wlvsb5":{title:"built using",source:{deployment:"edgeProvider"},target:{deployment:"edgeSdk"},id:"1wlvsb5"},"1mpjz5d":{title:"published to",source:{deployment:"edgeProvider"},target:{deployment:"edgeProviderHost.terralist"},id:"1mpjz5d"},"12ssq9":{title:"hosted on",source:{deployment:"edgeProvider"},target:{deployment:"edgeProviderHost.edp"},id:"12ssq9"},vfhcba:{title:"calls",source:{deployment:"edgeSdk"},target:{deployment:"edgeCloud.edgeApi"},id:"vfhcba"},"1sm6ifh":{title:"hosted on",source:{deployment:"edgeSdk"},target:{deployment:"edgeProviderHost.edp"},id:"1sm6ifh"},"1q6ftvm":{title:"authenticates via",source:{deployment:"edgeProviderHost.terralist"},target:{deployment:"edgeProviderHost.edp"},id:"1q6ftvm"},rr0lcz:{title:"creates/destroys",source:{deployment:"edgeCloud.edgeApi"},target:{deployment:"edgeCloud.edgeResources"},id:"rr0lcz"},"1fxu52d":{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantProd.otcTenantObservability"},id:"1fxu52d"},"6gfo3g":{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantProd.otcTenantCustomerA"},id:"6gfo3g"},s1ie0n:{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantNonProd.otcTenantDev1"},id:"s1ie0n"},"77azfi":{title:"deploys",source:{deployment:"otcTenantProd.otcTenantEdpBuildthing"},target:{deployment:"otcTenantNonProd.otcTenantTestX"},id:"77azfi"},"1k6h7jf":{title:"registers with and picks up jobs",source:{deployment:"edgeConnectEnv.runnerInfrastructure.forgejoRunner"},target:{deployment:"otcKubernetes.edpCluster.forgejo"},id:"1k6h7jf"},"1t1b56a":{title:"retrieves bootstrap information",source:{deployment:"edgeConnectEnv.runnerInfrastructure.forgejoRunner"},target:{deployment:"otcKubernetes.edpCluster.garmService"},id:"1t1b56a"}}},imports:{}}),{useLikeC4Model:KJe}=YJe(XJe);function ZJe({children:e}){const r=KJe();return y.jsx(YQe,{likec4model:r,children:e})}function QJe(e){return y.jsx(ZJe,{children:y.jsx(gJe,{renderIcon:NJe,...e})})}var $z={exports:{}},T0={},Rz={exports:{}},zz={};var one;function JJe(){return one||(one=1,(function(e){function r(B,F){var q=B.length;B.push(F);e:for(;0>>1,U=B[G];if(0>>1;Gi(O,q))Wi(Z,O)?(B[G]=Z,B[W]=q,G=W):(B[G]=O,B[K]=q,G=K);else if(Wi(Z,q))B[G]=Z,B[W]=q,G=W;else break e}}return F}function i(B,F){var q=B.sortIndex-F.sortIndex;return q!==0?q:B.id-F.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var l=Date,s=l.now();e.unstable_now=function(){return l.now()-s}}var c=[],d=[],u=1,p=null,f=3,g=!1,v=!1,w=!1,x=!1,k=typeof setTimeout=="function"?setTimeout:null,C=typeof clearTimeout=="function"?clearTimeout:null,_=typeof setImmediate<"u"?setImmediate:null;function $(B){for(var F=n(d);F!==null;){if(F.callback===null)o(d);else if(F.startTime<=B)o(d),F.sortIndex=F.expirationTime,r(c,F);else break;F=n(d)}}function R(B){if(w=!1,$(B),!v)if(n(c)!==null)v=!0,T||(T=!0,L());else{var F=n(d);F!==null&&V(R,F.startTime-B)}}var T=!1,A=-1,z=5,j=-1;function I(){return x?!0:!(e.unstable_now()-jB&&I());){var G=p.callback;if(typeof G=="function"){p.callback=null,f=p.priorityLevel;var U=G(p.expirationTime<=B);if(B=e.unstable_now(),typeof U=="function"){p.callback=U,$(B),F=!0;break t}p===n(c)&&o(c),$(B)}else o(c);p=n(c)}if(p!==null)F=!0;else{var Y=n(d);Y!==null&&V(R,Y.startTime-B),F=!1}}break e}finally{p=null,f=q,g=!1}F=void 0}}finally{F?L():T=!1}}}var L;if(typeof _=="function")L=function(){_(P)};else if(typeof MessageChannel<"u"){var H=new MessageChannel,M=H.port2;H.port1.onmessage=P,L=function(){M.postMessage(null)}}else L=function(){k(P,0)};function V(B,F){A=k(function(){B(e.unstable_now())},F)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(B){B.callback=null},e.unstable_forceFrameRate=function(B){0>B||125G?(B.sortIndex=q,r(d,B),n(c)===null&&B===n(d)&&(w?(C(A),A=-1):w=!0,V(R,q-G))):(B.sortIndex=U,r(c,B),v||g||(v=!0,T||(T=!0,L()))),B},e.unstable_shouldYield=I,e.unstable_wrapCallback=function(B){var F=f;return function(){var q=f;f=F;try{return B.apply(this,arguments)}finally{f=q}}}})(zz)),zz}var ine;function eet(){return ine||(ine=1,Rz.exports=JJe()),Rz.exports}var ane;function tet(){if(ane)return T0;ane=1;var e=eet(),r=Z6(),n=GN();function o(h){var m="https://react.dev/errors/"+h;if(1U||(h.current=G[U],G[U]=null,U--)}function O(h,m){U++,G[U]=h.current,h.current=m}var W=Y(null),Z=Y(null),Q=Y(null),ie=Y(null);function te(h,m){switch(O(Q,m),O(Z,h),O(W,null),m.nodeType){case 9:case 11:h=(h=m.documentElement)&&(h=h.namespaceURI)?cge(h):0;break;default:if(h=m.tagName,m=m.namespaceURI)m=cge(m),h=dge(m,h);else switch(h){case"svg":h=1;break;case"math":h=2;break;default:h=0}}K(W),O(W,h)}function re(){K(W),K(Z),K(Q)}function ue(h){h.memoizedState!==null&&O(ie,h);var m=W.current,b=dge(m,h.type);m!==b&&(O(Z,h),O(W,b))}function _e(h){Z.current===h&&(K(W),K(Z)),ie.current===h&&(K(ie),pb._currentValue=q)}var ce,pe;function xe(h){if(ce===void 0)try{throw Error()}catch(b){var m=b.stack.trim().match(/\n( *(at )?)/);ce=m&&m[1]||"",pe=-1>>1,U=B[G];if(0>>1;Gi(O,q))Wi(Z,O)?(B[G]=Z,B[W]=q,G=W):(B[G]=O,B[K]=q,G=K);else if(Wi(Z,q))B[G]=Z,B[W]=q,G=W;else break e}}return F}function i(B,F){var q=B.sortIndex-F.sortIndex;return q!==0?q:B.id-F.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;e.unstable_now=function(){return a.now()}}else{var l=Date,s=l.now();e.unstable_now=function(){return l.now()-s}}var c=[],d=[],u=1,p=null,f=3,g=!1,v=!1,w=!1,x=!1,k=typeof setTimeout=="function"?setTimeout:null,C=typeof clearTimeout=="function"?clearTimeout:null,_=typeof setImmediate<"u"?setImmediate:null;function $(B){for(var F=n(d);F!==null;){if(F.callback===null)o(d);else if(F.startTime<=B)o(d),F.sortIndex=F.expirationTime,r(c,F);else break;F=n(d)}}function R(B){if(w=!1,$(B),!v)if(n(c)!==null)v=!0,T||(T=!0,L());else{var F=n(d);F!==null&&V(R,F.startTime-B)}}var T=!1,A=-1,z=5,j=-1;function I(){return x?!0:!(e.unstable_now()-jB&&I());){var G=p.callback;if(typeof G=="function"){p.callback=null,f=p.priorityLevel;var U=G(p.expirationTime<=B);if(B=e.unstable_now(),typeof U=="function"){p.callback=U,$(B),F=!0;break t}p===n(c)&&o(c),$(B)}else o(c);p=n(c)}if(p!==null)F=!0;else{var Y=n(d);Y!==null&&V(R,Y.startTime-B),F=!1}}break e}finally{p=null,f=q,g=!1}F=void 0}}finally{F?L():T=!1}}}var L;if(typeof _=="function")L=function(){_(P)};else if(typeof MessageChannel<"u"){var H=new MessageChannel,M=H.port2;H.port1.onmessage=P,L=function(){M.postMessage(null)}}else L=function(){k(P,0)};function V(B,F){A=k(function(){B(e.unstable_now())},F)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(B){B.callback=null},e.unstable_forceFrameRate=function(B){0>B||125G?(B.sortIndex=q,r(d,B),n(c)===null&&B===n(d)&&(w?(C(A),A=-1):w=!0,V(R,q-G))):(B.sortIndex=U,r(c,B),v||g||(v=!0,T||(T=!0,L()))),B},e.unstable_shouldYield=I,e.unstable_wrapCallback=function(B){var F=f;return function(){var q=f;f=F;try{return B.apply(this,arguments)}finally{f=q}}}})(zz)),zz}var ine;function eet(){return ine||(ine=1,Rz.exports=JJe()),Rz.exports}var ane;function tet(){if(ane)return T0;ane=1;var e=eet(),r=Z6(),n=GN();function o(h){var m="https://react.dev/errors/"+h;if(1U||(h.current=G[U],G[U]=null,U--)}function O(h,m){U++,G[U]=h.current,h.current=m}var W=Y(null),Z=Y(null),Q=Y(null),ie=Y(null);function te(h,m){switch(O(Q,m),O(Z,h),O(W,null),m.nodeType){case 9:case 11:h=(h=m.documentElement)&&(h=h.namespaceURI)?cge(h):0;break;default:if(h=m.tagName,m=m.namespaceURI)m=cge(m),h=dge(m,h);else switch(h){case"svg":h=1;break;case"math":h=2;break;default:h=0}}K(W),O(W,h)}function re(){K(W),K(Z),K(Q)}function ue(h){h.memoizedState!==null&&O(ie,h);var m=W.current,b=dge(m,h.type);m!==b&&(O(Z,h),O(W,b))}function _e(h){Z.current===h&&(K(W),K(Z)),ie.current===h&&(K(ie),pb._currentValue=q)}var ce,pe;function xe(h){if(ce===void 0)try{throw Error()}catch(b){var m=b.stack.trim().match(/\n( *(at )?)/);ce=m&&m[1]||"",pe=-1)":-1