// Deployment model
deployment {

  cloud otc-edpFoundry 'OTC EDP Foundry Central Service clusters' {
    description '
      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'

    kubernetes cce 'OTC CCE' {
      description 'OTC Container Cluster Engine'
      icon tech:kubernetes
      technology 'Kubernetes'

      cluster internalServices 'EDP Foundry Internal Services' {
        instanceOf edp.argoCD
        instanceOf edp.forgejo {
          -> workflowSetupEDPInfrastructure.forgejoRunner 'invokes'
          -> workflowSetupArgoCDInfrastructure.forgejoRunner 'invokes'
        }
        instanceOf edp.externalSecrets
        instanceOf edp.openbao
        instanceOf edp.ingressNginx
      }

      cluster centralObservability 'EDP Foundry Central Observability' {
        instanceOf edp.grafana
        instanceOf edp.prometheus
        instanceOf edp.loki
      }
    }
    computeressource workflowSetupEDPInfrastructure 'EDP infrastructure Workflow' {
      description 'EDP infrastructure Workflow'

      instanceOf forgejoRunner {
        -> forgejoRunnerWorker 'runs'
      }
      instanceOf forgejoRunnerWorker {
        -> edpworkflow 'executes'
      }
      instanceOf edpworkflow {
        -> otc-edp-per-tenant.cce.edp 'deploys edp to otc.cce'
        -> otc-edp-per-tenant.cloudServices 'deploys edp to otc.paas'

      }
    }

    computeressource workflowSetupArgoCDInfrastructure 'EDP ArgoCD Workflow' {
      description 'EDP Setup ArgoCD Workflow'
      instanceOf forgejoRunner {
        -> forgejoRunnerWorker 'runs'
      }
      instanceOf forgejoRunnerWorker {
        -> edpworkflow 'executes'
      }
      instanceOf edpworkflow {
        -> otc-edp-per-tenant.cce.argoCD

      }
    }

    computeressource forgejoRunnerInfrastructure 'EDP ForgejoRunner infrastructure' {
      description 'Infrastructure for Forgejo runners like pods, vms, lxds, etc'
      instanceOf forgejoRunner {
        -> cce.internalServices.forgejo 'registers'
      }
    }

  }
}

