Skip to main content

MetaPaaS runtime for Exordos Core — single control-plane hosting many PaaS types as plugins

Project description

Exordos MetaPaaS

Single control-plane runtime hosting many PaaS types as installable plugins.

Instead of deploying a new VM + database for each PaaS service (s3, mail, database, etc.), MetaPaaS runs one shared control-plane that manages them all. A new PaaS is an installable plugin, not a new control-plane node — only data-plane instances are launched per service instance.

Quick Start

Build

make build
# Produces: output/exordos-metapaas.raw.zst, output/manifests/metapaas.yaml

Install to Exordos Core

exordos -e http://10.20.0.2:11010 -u admin -p <password> \
  ee install metapaas --version 0.0.7 --repository https://repo.exordos.com/exordos-elements

Create a PaaS Instance

Once metapaas is deployed, install a plugin (e.g., s3aas):

exordos -e http://10.20.0.2:11010 -u admin -p <password> \
  ee install s3aas --version 0.0.1 --repository https://repo.exordos.com/exordos-elements

Then create an instance via the metapaas-cp REST API:

curl -X POST http://metapaas-cp:8080/v1/types/s3/instances \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <token>' \
  -d '{
    "name": "s3-prod",
    "version": "0.0.1",
    "bucket_name": "data",
    "encryption": "aes256"
  }'

Documentation

For Platform Users

  • DESIGN.md — Architecture, why this approach, solved decisions

For PaaS Plugin Developers

  • HOW_TO_BUILD_NEW_PAAS.md — Complete guide: 9 steps from architecture to deployment
    • Control Plane (CP): SQLAlchemy models, REST controllers, IAM setup
    • Data Plane (DP): Packer image config, health checks, systemd units
    • Build config, manifest template, tests, CI/CD
    • Examples: mail-aas (Postfix+Dovecot), database-aas patterns
    • Checklist + troubleshooting

Reference Plugins

  • ../exordos_s3/ — Production s3aas plugin (validated, fully featured)
  • ../exordos_mail/ — Blueprint mail-aas plugin (validates framework is service-agnostic)
  • ./metapaas_demo/ — Demo plugin (bundled in runtime, minimal example)

Architecture

exordos_core (user-facing)
    ↓
exordos_metapaas-cp (single shared control-plane)
    ├─ user-api       (REST endpoints: /v1/types/<slug>/instances)
    ├─ orch-api       (orchestration, node lifecycle)
    ├─ status-api     (monitoring, node status)
    └─ PostgreSQL     (shared database for all plugins)
        ├─ s3_instances, s3_buckets, ...
        ├─ mail_instances, mail_users, ...
        └─ plugin_migrations (each plugin versions independently)
    ↓
data-plane nodes (s3-dp, mail-dp, db-dp, ...)
    ↓
actual services (RustFS, Postfix, PostgreSQL, ...)

Key insight: Plugin = pip package with CP code + manifest + DP image. No new CP VM, no new database — just install and go.

Building Your First Plugin

  1. Read HOW_TO_BUILD_NEW_PAAS.md
  2. Copy structure from ../exordos_mail/ (simple, well-commented)
  3. Follow the 9 steps: models → controllers → IAM → DP image → manifest → build → tests
  4. Validate against the checklist
  5. Deploy and test

Development

Unit Tests

tox -e py312

Linting & Type Checking

tox -e ruff-check
tox -e mypy

Full Test Matrix

tox

Plugin Installation Mechanism

When a PaaS element is installed in exordos_core:

  1. PluginReconciler (running on metapaas-cp) detects new element
  2. Fetches the CP wheel from the pip index (registry URL from element spec)
  3. Installs wheel on metapaas-cp with pip install --upgrade
  4. Discovers the plugin via entry-point: [project.entry-points."exordos_metapaas.plugins"]
  5. Registers REST routes, models, migrations
  6. Applies any pending database migrations (cross-project safe via UUID-keyed tracking)
  7. Reloads metapaas-cp services to pick up new routes

Data-plane nodes are provisioned per instance as the plugin's CP controllers orchestrate them.

Troubleshooting

Plugin not appearing in API

Check PluginReconciler logs on metapaas-cp:

exordos -e http://10.20.0.2:11010 -u admin -p <pass> \
  cn exec metapaas-cp -- \
  journalctl -u metapaas-plugin-reconciler -f

Cannot create instance

Verify metapaas-cp is reachable and user has credentials:

curl -s http://metapaas-cp:8080/v1/types/ -H 'Authorization: Bearer <token>' | jq .

Data-plane nodes stuck in CREATING

Check orchestration (orch-api) and agent logs on metapaas-cp:

exordos -e http://10.20.0.2:11010 -u admin -p <pass> \
  cn exec metapaas-cp -- \
  tail -f /var/log/orch-api.log

Standards

  • Python: 3.10+
  • Testing: pytest, tox, coverage
  • Code style: ruff (fmt + check), mypy
  • Database: SQLAlchemy 2.0+, PostgreSQL 13+
  • Container format: Packer → Zstandard-compressed raw image

License

Proprietary — Exordos

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

exordos_metapaas-0.0.1.tar.gz (166.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

exordos_metapaas-0.0.1-py3-none-any.whl (49.5 kB view details)

Uploaded Python 3

File details

Details for the file exordos_metapaas-0.0.1.tar.gz.

File metadata

  • Download URL: exordos_metapaas-0.0.1.tar.gz
  • Upload date:
  • Size: 166.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for exordos_metapaas-0.0.1.tar.gz
Algorithm Hash digest
SHA256 73a38d047bfd58fc7e6aeb71f9ee7b421241608ab02b5218197e6b6aca698142
MD5 344d9ffdc4270ca4e300d519f6a7c79c
BLAKE2b-256 5705fbdd2a02fe75f2746e81c8252ffd7c190d6f13a8bed4352545754f5bc045

See more details on using hashes here.

Provenance

The following attestation bundles were made for exordos_metapaas-0.0.1.tar.gz:

Publisher: publish-to-pypi.yml on exordos/exordos_metapaas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file exordos_metapaas-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for exordos_metapaas-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 827198938e99d8be8b530e2ded13fab7e2c1ecd07db61f995cb0ca6a2d421496
MD5 45819b67280991cace50a8f4328dedd4
BLAKE2b-256 caa7a3950b3cc829734b14e40f9bd85056af40c8d80b89e94e963d1e88c51d16

See more details on using hashes here.

Provenance

The following attestation bundles were made for exordos_metapaas-0.0.1-py3-none-any.whl:

Publisher: publish-to-pypi.yml on exordos/exordos_metapaas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page