Feature/1175 add minos support#281
Merged
Merged
Conversation
…nd OpenTofu constants
…nd docker-compose from template
filippo-20tab
approved these changes
Apr 28, 2026
This was referenced Apr 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Refactor of the Talos bootstrap to align the generated platform repository with
the new Minos architecture used by
gs1-one,gs1-procedo,gs1-tendenze.The old
stacks + environments-distribution + deployment-typemodel is replacedby clusters (platform) + environment→cluster mapping (services) with
per-cluster multi-select of core providers (AWS, DigitalOcean). The generated
platform repo no longer ships local
.tfsources: the OpenTofu modules now livein
minosand are consumed viathe
registry.gitlab.com/20tab-open/minos/{platform,service}Docker images +GitLab Components
${CI_SERVER_FQDN}/components/opentofu/{job-templates,apply}@3.11.0.Model change
stacks(main/dev) shared bybase/cluster/environmentstagesclusters(dev,main) with per-clustercore_providersservice_slugenv-distribution coupled to stacksservice_slug×environment(mapped to a cluster viaenv_to_cluster)digitalocean-k8s/other-k8scluster_core_providers${proj}_${svc}_${stage}_${stack}tfe_project "${proj}"withdefault_execution_mode = "local", named${proj}_platform_${cluster}_core_${provider}and${proj}_platform_${cluster}_kubernetesstacks/${stack}/…,envs/${env}/…platforms/${cluster}/…,envs/${env}/…,envs/${env}/${service}/…Generated platform repo (output)
.gitlab-ci.ymlclone ofgs1-one/.gitlab-ci.yml(matrixCORE_PROVIDER,image: minos/platform, stagescore:plan/applyandkubernetes:plan/apply,workflow rules require
CLUSTER=<slug>on web pipelines).minos/${CLUSTER}/core/{aws,digitalocean}.tfvars+minos/${CLUSTER}/kubernetes.tfvarsgenerated post-cookiecutter in Python (loop on clusters × providers).
vault-project.tfvars.examplepre-populated for Phase A admin run ofvault-project.backend/,frontend/) are populated as independentGitLab projects with their own
.gitby the sub-bootstrappers.terraform/,scripts/deploy/,traefik/,docker-compose.yaml,legacy stages-based
.gitlab-ci.yml, Terraform-specific.gitignoreblock.Internal changes
bootstrap/collector.py:set_clusters()(multi-cluster + per-clustercomma-separated providers),
set_envs()(env→cluster mapping). Removedset_deployment_type(),set_environments_distribution(),set_kubernetes().bootstrap/runner.py: new fieldsclusters,cluster_core_providers,env_to_cluster,python_version,node_version,minos_platform_image,minos_service_image,opentofu_component_version,opentofu_version. Newrender_minos_per_cluster_files(). Vault payload moved to per-clusterpaths.
init_subrepo()propagates the new fields to django-cd / nextjs-cdsub-runners.
init_terraform_cloud()rewrites the local TFC module env vars.Dropped
set_stacks,collect_tfvars, allregister_*_tfvarshelpers, andthe
kubernetes_*/deployment_type/environments_distributionfields.terraform/terraform-cloud/main.tf: introducestfe_project.mainwithdefault_execution_mode = "local", workspaces inherit, providertfe ~> 0.70. Service workspaces are no longer created here — they remain aresponsibility of the sub-bootstrappers, which are still functional standalone.
terraform/gitlab/main.tf: droppedREGISTRY_PASSWORD/REGISTRY_USERNAMEgroup variables (CI now uses GitLab built-in
CI_DEPLOY_*).cookiecutter.json: cleaned up of legacy keys, new defaults for clustervocabulary, Minos images, OpenTofu and Python versions.
Sub-bootstrapper alignment
django-continuous-delivery#…(companion PR): same model, uv-based Dockerfileon Python 3.14,
pyproject.toml, scripts aligned togs1-one/api.nextjs-continuous-deliveryalready merged (PR Add cluster-level logging #84) + follow-up branchfeature/1175-tfc-cloud-followupfor the TFC module rewrite.Both sub-bootstrappers retain their own
terraform/terraform-cloud/modules sothey keep working standalone; Talos passes
terraform_cloud_project_create=Falsewhen invoking them, so the TFC project is created once by Talos and reused by
each sub idempotently.
Breaking changes
deployment_type,environments_distribution,kubernetes_cluster_ca_certificate,kubernetes_host,kubernetes_tokenare gone. Existing automation scripts passing these flags must drop them.
other-k8sdeployment is no longer supported (Minosservicemodule isDigitalOcean-only today; can be re-introduced when a generic-k8s Minos
variant ships).
~> 0.70(needsdefault_execution_modeon
tfe_project).stacks/…is notmigrated automatically; legacy projects keep their layout, new projects use
platforms/{cluster}/….Prerequisites
vault-projectonce per project (the generatedvault-project.tfvars.examplehas the correct values pre-filled).gs1it-servizifor the GS1 line) orterraform_cloud_organization_create=Trueat bootstrap.Verification
docker run --rm --entrypoint python <image> -m unittest discover tests→91 tests, 0 failures.
repo top-level +
minos/{dev,main}/core/{aws,digitalocean}.tfvars+kubernetes.tfvarsgenerated as expected;vault-project.tfvars.examplerendered with the correct
serviceslist derived frombackend_service_slug+frontend_service_slug.gs1-oneandgs1-procedo(gs1it-serviziorg).Post-merge
legacy/v1on the previousmainhead.v2.0.0after merge.~/.claude/plans/1175-handoff.mdreference doc if the parallelworkstream notes change.