From 47c0d84d6eb49ee4736fccf49bb993aa64b7ac52 Mon Sep 17 00:00:00 2001 From: Waldemar Date: Wed, 2 Apr 2025 18:19:51 +0200 Subject: [PATCH] Added edpbuilder workflow --- likec4/spec.c4 | 3 ++ likec4/workflow.c4 | 106 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 likec4/workflow.c4 diff --git a/likec4/spec.c4 b/likec4/spec.c4 index 233c42f..6919210 100644 --- a/likec4/spec.c4 +++ b/likec4/spec.c4 @@ -19,6 +19,9 @@ specification { } } + element workflow + element step + deploymentNode node deploymentNode environment deploymentNode namespace diff --git a/likec4/workflow.c4 b/likec4/workflow.c4 new file mode 100644 index 0000000..f1eb7ab --- /dev/null +++ b/likec4/workflow.c4 @@ -0,0 +1,106 @@ +model { + workflow edfbuilder "EDFbuilder" { + step runEDP "Run edpbuilder" + step createCrossplaneNS "Create Crossplane namespace" + step installCrossplaneHelm "Install Crossplane Helm Chart" + step installCrossplaneFunctionsAndProviders "Install Crossplane Functions and Providers" + step waitForCrossplaneFunctionsAndProviders "Wait for Crossplane Functions and Providers to become available" + step setupCrossplaneServiceAccount "Apply cluster-admin role to crossplane shell provider service account" + step createArgoCdNS "Create ArgoCD namespace" + step createGiteaNS "Create Gitea namespace" + step createArgoCdTlsCert "Create TLS Cert for Argo" + step createGiteaTlsCert "Create TLS Cert for Forgejo" + step createEDFBuilderDefinition "Create EDFbuilder crossplane definition (defines API)" + step createEDFBuilderComposition "Create EDFbuilder crossplane composition (defines what happens when EDFbuilder is applied)" + step applyEDFBuilder "Applies EDFbuilder resource (and triggers creation)" { + style { + opacity 15% + } + + step setEnvVars "Set required environment variables" + step readWriteKubeConf "Make kube.conf write/readbale" + step setWorkDir "Set workdir to /tmp/rundir" + step cloneStacksRepo "Clone steps repo and checkout desired branch" + step hydrateStacksWithValues "Hydrate Stacks with values" + step createNamespaces "Create all required namespaces" + step createGiteaAdminPass "Create Admin Password for Forgejo" + step createGrafanaPass "Create Grafana Admin Password" + step applyServiceMonitorCRD "Apply ServiceMonitor CRDs for Prometheus" + step cloneIngressNginxChart "Git clone ingress-nginx helm chart" + step isntallIngressNginx "Install ingress-nginx from cloned chart" + step waitForIngress "Wait till ingress-nginx is ready" + step cloneArgoCDHelm "Git clone ArgoCD Helm Chart" + step installArgoCD "Install ArgoCD Helm Chart" + step installArgoCDIngress "Install ingress for ArgoCD" + step cloneForgejoHelmChart "Git clone Forgejo Helm Chart" + step installForgejo "Install Forgejo Helm Chart" + step installForgejoIngress "Install ingress for Forgejo" + step waitForArgoCD "Wait till ArgoCD is available" + step waitForForgejo "Wait till Forgejo is available" + step createForgejoUser "Create technical user for Forgejo" + step createForgejoRepo "Create repository for EDP state in Forgejo" + step installForgejoRunner "Install Forgejo Runner deployment" + step registerForgejoRunner "Create registration token secret for runner" + step configGitIdentity "Configure Git identity" + step configCrossplaneArgoCDProvider "Configure Crossplane ArgoCD provider" + step configCrossplaneKindProvider "Configure Crossplane Kind provider" + step uploadStacksToForgjo "Git push hydrated stacks to Forgejo isntance" + step configArgoDockerRegistry "Configure Docker Registry for Argo Workflows" + step createPackagesForgejoUser "Create packages user and token in Forgejo (unused?)" + step installArgoCDStacks "Apply all selected ArgoCD stacks" + step cleanup "Cleanup work folder and unset all env vars" + + setEnvVars -> readWriteKubeConf + readWriteKubeConf -> setWorkDir + setWorkDir -> cloneStacksRepo + cloneStacksRepo -> hydrateStacksWithValues + hydrateStacksWithValues -> createNamespaces + createNamespaces -> createGiteaAdminPass + createGiteaAdminPass -> createGrafanaPass + createGrafanaPass -> applyServiceMonitorCRD + applyServiceMonitorCRD -> cloneIngressNginxChart + cloneIngressNginxChart -> isntallIngressNginx + isntallIngressNginx -> waitForIngress + waitForIngress -> cloneArgoCDHelm + cloneArgoCDHelm -> installArgoCD + installArgoCD -> installArgoCDIngress + installArgoCDIngress -> cloneForgejoHelmChart + cloneForgejoHelmChart -> installForgejo + installForgejo -> installForgejoIngress + installForgejoIngress -> waitForArgoCD + waitForArgoCD -> waitForForgejo + waitForForgejo -> createForgejoUser + createForgejoUser -> createForgejoRepo + createForgejoRepo -> installForgejoRunner + installForgejoRunner -> registerForgejoRunner + registerForgejoRunner -> configGitIdentity + configGitIdentity -> configCrossplaneArgoCDProvider + configCrossplaneArgoCDProvider -> configCrossplaneKindProvider + configCrossplaneKindProvider -> uploadStacksToForgjo + uploadStacksToForgjo -> configArgoDockerRegistry + configArgoDockerRegistry -> createPackagesForgejoUser + createPackagesForgejoUser -> installArgoCDStacks + installArgoCDStacks -> cleanup + } + + runEDP -> createCrossplaneNS + createCrossplaneNS -> installCrossplaneHelm + installCrossplaneHelm -> installCrossplaneFunctionsAndProviders + installCrossplaneFunctionsAndProviders -> waitForCrossplaneFunctionsAndProviders + waitForCrossplaneFunctionsAndProviders -> setupCrossplaneServiceAccount + setupCrossplaneServiceAccount -> createArgoCdNS + createArgoCdNS -> createGiteaNS + createGiteaNS -> createArgoCdTlsCert + createArgoCdTlsCert -> createGiteaTlsCert + createGiteaTlsCert -> createEDFBuilderDefinition + createEDFBuilderDefinition -> createEDFBuilderComposition + createEDFBuilderComposition -> applyEDFBuilder + } +} + +views { + view edpbuilderworkflow of edfbuilder { + description 'Describes the process how to create an EDP instance' + include edfbuilder.** + autoLayout LeftRight 120 110 +} \ No newline at end of file