# How Quake AI uses OpenStack

Source: https://docs.quake.ai/docs/platform/migration/openstack
Markdown: https://docs.quake.ai/docs/platform/migration/openstack.md

---

# How Quake AI uses OpenStack

Quake AI runs on OpenStack {OPENSTACK_RELEASE}. Each public Quake AI service (compute, networking, storage, automation, and Kubernetes) maps to an OpenStack project. The standard OpenStack CLI, APIs, and Terraform provider work with these public services. If you have existing OpenStack experience, it transfers directly.

You do not need to understand OpenStack to use Quake AI. The documentation uses Quake AI terms, and you can provision and manage infrastructure entirely through the Console, CLI, or Terraform without learning the underlying project names first. The project names appear in CLI commands, API endpoints, Terraform resources, and parts of the Console UI. This page explains the relationship so those names make sense when you encounter them.

## What Quake AI deploys

Each Quake AI service maps to one or more OpenStack projects. The table below shows the primary mapping, what each project handles, and the API endpoint pattern.

| Quake AI service | OpenStack project | What it does | API endpoint |
|---|---|---|---|
| the Console | [Skyline](https://docs.openstack.org/skyline/latest/) | The web UI for Quake AI services. Customized from upstream Skyline. | n/a (browser-only) |
| [Compute](/docs/compute) | [Nova](https://docs.openstack.org/nova/latest/) | Virtual machine lifecycle: create, start, stop, resize, snapshot, delete | `compute.{region}.rumble.cloud` |
| [Network](/docs/network) | [Neutron](https://docs.openstack.org/neutron/latest/) | Private networks, subnets, routers, security groups, floating IPs | `network.{region}.rumble.cloud` |
| [Block Storage](/docs/platform#storage) | [Cinder](https://docs.openstack.org/cinder/latest/) | Persistent NVMe volumes: create, attach, snapshot, clone, transfer | `volume.{region}.rumble.cloud` |
| [Object Storage](/docs/object) | [Swift](https://docs.openstack.org/swift/latest/) | S3-compatible object storage for files, backups, and media | `object.{region}.rumble.cloud` |
| Images | [Glance](https://docs.openstack.org/glance/latest/) | OS images and instance snapshots: the boot source catalog | `image.{region}.rumble.cloud` |
| [Kubernetes](/docs/kubernetes) | [Magnum](https://docs.openstack.org/magnum/latest/) | Kubernetes cluster provisioning and lifecycle management | `container-infra.{region}.rumble.cloud` |
| [Automation](/docs/automation) | [Heat](https://docs.openstack.org/heat/latest/) | Stack-based orchestration using YAML templates | `orchestration.{region}.rumble.cloud` |
| Identity | [Keystone](https://docs.openstack.org/keystone/latest/) | Authentication, projects, roles, and application credentials | `keystone.rumble.cloud` |

The Compute API runs version {COMPUTE_API_VERSION}. The Identity API runs version {IDENTITY_API_VERSION}. For the full endpoint list with `clouds.yaml` configuration, see [Service Endpoints](/docs/platform/access/service-endpoints).

## Audience

### New to cloud

You can skip the rest of this page. Follow the [Quickstart](/docs/quickstart) and use whichever interface you prefer: the Console, the CLI, or OpenTofu (each is available as a tab on step 3).

When you see names like "Nova" or "Neutron" in a CLI command or error message, they refer to the OpenStack projects listed in the table above. The mapping is stable: Compute always means Nova, and Network always means Neutron, so you can treat the names as interchangeable labels for the same service.

### Experienced with OpenStack

Everything works as expected. The CLI is `python-openstackclient`, installed with `pip`. Authentication uses `openrc.sh` with application credentials ([generate credentials](/docs/platform/access/generate-app-credentials)). Heat templates use standard HOT syntax with resource types like `OS::Nova::Server` and `OS::Neutron::Net`. The Terraform provider is [`openstack`](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs), with resources like `openstack_compute_instance_v2` and `openstack_networking_secgroup_v2`.

Quake AI-specific details to note:

- **Console UI:** the Console is built on upstream OpenStack Skyline with Quake AI-specific layout, navigation, and form customizations. Customer documentation refers to it as the Console or "Cloud Console", not "Skyline". The Console hostname is `sky.{region}.rumble.cloud`; the embedded VNC viewer is served from `sky-console.{region}.rumble.cloud`.
- **API rate limits:** OpenStack removed built-in rate limiting in Rocky (2018). The Nova and Cinder `/limits` endpoints return `"rate": []` on Antelope. Any rate limiting in front of the APIs sits at the openresty gateway and does not return `RateLimit-*` or `Retry-After` headers. If you receive HTTP 429, implement exponential backoff. HTTP 413 on this platform indicates quota exhaustion.
- **Resource tiers:** Quake AI uses a tier-based quota model. Your [resource tier](/docs/platform/account/resource-tiers) sets your project's vCPU, RAM, and storage limits. Individual instance launches do not raise the cap.
- **Default image:** {`Ubuntu 24.04`} with cloud-init pre-configured. See [Images](/docs/compute/concepts/images) for the full public catalog.
- **Default key algorithm:** ED25519. Quake AI also accepts RSA.
- **Networking:** Projects include `PublicEphemeral` (direct-attach for testing) and `PublicStatic` (routed via private networks for production). See [Networks](/docs/network/concepts/networks) for the topology model.
- **Object storage:** S3-compatible via the Swift S3 gateway. Standard S3 SDKs work with `--endpoint-url`. Native Swift ACLs apply. See the [S3 feature compatibility matrix](/docs/object/migration/plan-your-migration#s3-feature-compatibility) for supported and unsupported S3 features.

### Migrating from another cloud

If you are coming from AWS, GCP, Azure, Hetzner, or another provider, the core concepts map to OpenStack projects with different names:

| Your current platform | Quake AI equivalent | OpenStack project |
|---|---|---|
| AWS EC2 instances / GCP Compute Engine VMs | Instances (flavors define size) | Nova |
| AWS VPC / GCP VPC / Azure VNet | Networks and subnets | Neutron |
| AWS EBS / GCP Persistent Disk / Azure Managed Disk | Volumes | Cinder |
| AWS S3 / GCP Cloud Storage / Azure Blob Storage | Object storage (containers/buckets) | Swift |
| AWS ELB / GCP Cloud Load Balancing | Self-managed reverse proxy, external edge, or Kubernetes `Service type: LoadBalancer` | Application software, external service, or Kubernetes |
| AWS EKS / GCP GKE / Azure AKS | Kubernetes clusters | Magnum |
| AWS CloudFormation | Heat stacks (or use [OpenTofu](/docs/automation/concepts/terraform)) | Heat |
| AWS IAM | Application credentials and project roles | Keystone |

Platform differences:

- **Databases:** deploy PostgreSQL, MySQL, or Redis on instances using [automation templates](/build/iac-templates).
- **Authorization:** Keystone provides `admin`, `member`, and `reader` roles at the project level. IAM-style resource policies are absent; use project isolation for separate trust boundaries.
- **Billing model:** your resource tier sets the quota ceiling; individual instance launches do not incur separate charges.
- **Terraform provider change**: replace `hashicorp/aws` (or equivalent) with `terraform-provider-openstack/openstack`. Resource names change (`aws_instance` becomes `openstack_compute_instance_v2`). See [Introduction to Terraform on Quake AI](/docs/automation/concepts/terraform).

Migration guides for object storage are available at [Object storage migration](/docs/object/migration).

## Where OpenStack terms appear

You will encounter OpenStack project names in CLI output, API references, Terraform resources, and troubleshooting docs. This is by design: the tooling runs on OpenStack, and masking the names would make troubleshooting and external documentation harder to use.

- **CLI commands**: OpenStack CLI commands use the `openstack` prefix: `openstack server create`, `openstack network list`, `openstack volume show`
- **API endpoints**: the base URLs use OpenStack service names: `compute.{region}.rumble.cloud` (Nova), `network.{region}.rumble.cloud` (Neutron)
- **Terraform resources**: all resource types use the `openstack_` prefix: `openstack_compute_instance_v2`, `openstack_networking_secgroup_v2`, `openstack_blockstorage_volume_v3`
- **Heat templates**: resource types use the `OS::` namespace: `OS::Nova::Server`, `OS::Neutron::Net`, `OS::Cinder::Volume`
- **Console UI**: the Automation section displays **Heat Stacks** as a menu item; the API dashboard lists OpenStack service names alongside Quake AI service names
- **Error messages**: API errors reference the originating service: a network conflict returns a Neutron 409, a quota exceeded error references Nova or Cinder

When you search for help with an error, using both the Quake AI service name and the OpenStack project name improves your results. For example, searching "Neutron security group rule conflict" finds upstream OpenStack documentation that applies directly to Quake AI.

## OpenStack services Quake AI does not offer

Quake AI does not offer the following OpenStack projects as public services:

| OpenStack project | What it would provide | Alternative |
|---|---|---|
| Designate | DNS as a service | Use an external DNS provider (Cloudflare, Route 53) or configure DNS on your own instances |
| Octavia | Load balancing as a service | Run HAProxy, Nginx, Caddy, Traefik, or Envoy on Compute, use an external CDN or WAF, or expose Kubernetes workloads with `Service type: LoadBalancer` |
| Barbican | Key and certificate management | Store application secrets in CI, Kubernetes, or a self-managed secrets service; install TLS certificates on application or reverse proxy instances |
| Cinder Backup | Native volume backup service | Use volume snapshots for point-in-time recovery or volume clones for independent copies |
| Manila | Shared file systems (NFS/CIFS) | Use NFS on a dedicated instance or object storage |
| Ironic | Bare metal provisioning | Not available: all workloads run on virtual machines |
| Trove | Database as a service | Deploy databases on instances using [self-managed templates](/build/iac-templates/self-managed-postgres) |
| Sahara | Big data processing | Deploy Spark, Hadoop, or other frameworks on instances or Kubernetes clusters |
| Zaqar | Messaging | Use RabbitMQ, Redis, or NATS on instances |

If your workload depends on one of these services, you can self-host the equivalent on Quake AI instances. The [automation templates](/build/iac-templates) provide validated starting points for common self-managed deployments.

## See also

- [Service Endpoints](/docs/platform/access/service-endpoints): published service base URLs, `clouds.yaml` example, endpoint discovery
- [OpenStack CLI](/docs/platform/access/openstack-cli): install and configure the `openstack` command-line client
- [Install OpenStack client](/docs/platform/access/install-openstack-client): detailed installation for all platforms
- [Application credentials](/docs/platform/access/app-credentials): authenticate CLI and API access
- [Quickstart](/docs/quickstart): first steps with Quake AI
- [Introduction to Terraform on Quake AI](/docs/automation/concepts/terraform): IaC with the OpenStack provider
- [OpenStack upstream documentation](https://docs.openstack.org/): official project docs for all OpenStack services
