Skip to content

Repository files navigation

mapt

Multi Architecture Provisioning Tool

Spin up cloud machines in seconds. Tear them down just as fast. Spot pricing. Airgap topologies. CI/CD native. Built for operators.

Build OCI License


What is mapt?

mapt is a command-line tool for provisioning and destroying cloud environments across AWS, Azure, and IBM Cloud. It wraps multi-cloud infrastructure into a single, consistent interface — optimized for cost, speed, and CI/CD integration.

mapt <provider> <target> <create|destroy> [flags]

One pattern. Every cloud. Every OS.


Quickstart

Pull the container and provision a Fedora machine on AWS spot:

podman run -d --name mapt-fedora \
    -v ${PWD}:/workspace:z \
    -e AWS_ACCESS_KEY_ID=<key> \
    -e AWS_SECRET_ACCESS_KEY=<secret> \
    -e AWS_DEFAULT_REGION=us-east-1 \
    quay.io/redhat-developer/mapt:latest aws fedora create \
        --project-name my-fedora \
        --backed-url file:///workspace \
        --conn-details-output /workspace \
        --spot

Connection details land at ${PWD}/host, ${PWD}/username, and ${PWD}/id_rsa. Destroy with the same flags, swapping create for destroy.


What can you provision?

Instances

Target AWS Azure IBM Cloud
macOS (x86, M1, M2) docs
Windows Server docs
Windows Desktop docs
RHEL docs docs
RHEL AI docs docs
Fedora docs docs
Ubuntu docs
IBM Z (s390x) docs
IBM Power (ppc64le) docs

Services

Service AWS Azure IBM Cloud Description
Kind docs docs docs Lightweight Kubernetes via Kind
EKS docs Managed Kubernetes with spot node groups
AKS docs Managed Kubernetes
OpenShift SNC docs Single-node OpenShift for testing
Mac-Pool docs Shared Mac host pool — amortize the 24h minimum

Architectures

Architecture Providers
x86_64 AWS, Azure, IBM Cloud
arm64 AWS, Azure
s390x IBM Cloud
ppc64le IBM Cloud

Key features

Spot-optimized provisioning

mapt scans placement scores and pricing across all regions to find the best cost vs. availability balance — no manual region hunting. If a region doesn't have the instance you need, mapt falls back automatically.

mapt aws rhel create --spot \
    --project-name my-rhel --backed-url file:///workspace \
    --conn-details-output /workspace

Hardware-spec instance selection

Describe the machine you need; mapt picks the right instance type:

mapt azure fedora create \
    --arch arm64 --cpus 4 --memory 16 \
    --project-name fedora-arm --backed-url file:///workspace \
    --conn-details-output /workspace

Flags: --arch, --cpus, --memory, --nested-virt, --compute-sizes Details: instance selection docs

Airgap topology

Provision an isolated machine behind a jump bastion. mapt wires up the full network — you get bastion connection details alongside the target host.

mapt aws rhel create --airgap \
    --project-name rhel-airgap --backed-url file:///workspace \
    --conn-details-output /workspace

Outputs: host, username, id_rsa, bastion_host, bastion_username, bastion_id_rsa

Self-destruct timer (serverless mode)

Set --timeout and mapt will tear itself down automatically if the destroy never runs — pipeline crash, lost state, whatever. No orphaned resources, no surprise bills.

Details: serverless mode docs


CI/CD integrations

mapt machines register themselves with your CI system at provision time — nothing to configure after the fact.

GitHub Actions self-hosted runner

mapt aws fedora create --spot \
    --install-ghactions-runner \
    --ghactions-runner-repo "https://github.com/your-org/your-repo" \
    --ghactions-app-id "123456" \
    --ghactions-app-installation-id "789012" \
    --ghactions-app-private-key "/path/to/private-key.pem" \
    --project-name fedora-runner --backed-url file:///workspace \
    --conn-details-output /workspace

Auth methods: GitHub App (recommended), PAT, or pre-generated registration token. Supported targets: AWS (Windows, RHEL, Fedora, macOS) · Azure (Windows, RHEL) · IBM Cloud (Power, Z) Details: self-hosted runner docs

GitLab Runner

mapt aws fedora create --spot \
    --glrunner-token <token> \
    --project-name fedora-gitlab --backed-url file:///workspace \
    --conn-details-output /workspace

Supported targets: AWS (Windows, RHEL, Fedora, macOS) · Azure (Windows, RHEL) · IBM Cloud (Power, Z) Details: GitLab runner docs

Tekton tasks

Tekton tasks for dynamic provisioning inside pipelines are available in the tkn/ directory.


Running mapt

Container (recommended)

podman run -d --name mapt \
    -v ${PWD}:/workspace:z \
    -e AWS_ACCESS_KEY_ID=<key> \
    -e AWS_SECRET_ACCESS_KEY=<secret> \
    -e AWS_DEFAULT_REGION=us-east-1 \
    quay.io/redhat-developer/mapt:latest aws fedora create \
        --project-name my-env \
        --backed-url file:///workspace \
        --conn-details-output /workspace

The --backed-url volume mount holds your stack state — keep it, you need it to destroy.

Binary

go install github.com/redhat-developer/mapt/cmd/mapt@latest
mapt --help

State management

mapt uses Pulumi under the hood. Stack state is stored at --backed-url:

  • Local: file:///absolute/path — simplest, works for local dev
  • S3: s3://your-bucket — required for serverless mode and shared CI
  • Azure Blob: azblob://your-container

The --project-name flag namespaces stacks, so you can run multiple environments from the same backend.


Releases

Packages

Used by

Contributors

Languages