Wat het is
CDS is een compiler en CLI voor declaratieve data stacks. Je beschrijft de stack in YAML. CDS valideert die, lost de koppelingen op en rendert er één Docker Compose-model of een Kubernetes-target van. CDS draait zelf geen containers. Voor cds up roept het de echte docker compose aan.
Bouwstenen
- Modules ( modules///module.yaml ) zijn herbruikbare definities. Ze bevatten:
- een gesloten JSON-Schema- configSchema met defaults,
- de contracten die ze leveren ( provides ) en gebruiken ( consumes ),
- een inline Docker Compose-template.
- Profielen ( profiles/ ) kiezen module-instanties en de topologie.
- Contracten ( shared/contracts/ ) beschrijven de interfaces tussen modules. Voorbeelden zijn een database-verbinding, een lineage-sink en een identity provider.
Een module kent de servicenaam van een andere module niet. Een provider biedt een benoemd contract aan. De consumer koppelt het via mappedFrom, en het profiel legt de binding met contractRef: .. Zo wissel je Postgres voor een ander warehouse zonder de rest aan te passen.
De compile-pipeline
load → validate → plan → render
- Validate: controleert de vorm van profiel en modules, de modulepaden, de dependency-graph, secrets en contractcompatibiliteit.
- Plan: past schema-defaults toe en lost contracten op tot een cds/v1alpha1 -Plan.
- Render: expandeert ${config.} , ${bindings.} en ${service.host} en levert één Compose-model op.
Fouten komen terug als gestructureerde diagnostics met een stabiele code, een melding en een exact datapad. Bij foutmeldingen stopt CDS vóór de volgende stap.
Beveiliging
- Secret-waarden komen nooit in plannen of gerenderde Compose-bestanden. Profielen mappen aliassen naar CDS_* -omgevingsvariabelen, en Docker Compose lost die pas bij runtime op.
- cds test draait validate, de security-regels, plan en render. De regels staan als data in rule-set.json , dus je kunt ze uitbreiden zonder Python te schrijven.
- Imagehardening (non-root, read-only root, dropped capabilities) en hash-locked dependencies zijn onderdeel van de baseline.
Snel starten
python3 -m venv .venv && source .venv/bin/activate
python -m pip install -e .
cds validate
cds test
cds render –output /tmp/docker-compose.yml
cds up
Een eigen module toevoegen
- Maak modules/<categorie>/<naam>/module.yaml met apiVersion: cds/v1alpha1 en kind: Module .
- Definieer configSchema met defaults en de provides / consumes -contracten.
- Schrijf de Compose-template onder spec.implementation .
- Verwijs ernaar vanuit een profiel en draai cds validate .
Waarom dit voor je werkt
- Reproduceerbare stacks: dezelfde YAML levert dezelfde uitkomst.
- Fouten ontdek je vroeg, niet pas bij deploy.
- Geen vendor lock-in door contractgebaseerde koppelingen.
- Tests draaien zonder Docker ( unittest , unittest.mock ).
Ook uitgelegd voor
Terug naar Composable Data Stack (CDS) · Broncode op GitHub · Contact