Skip to content
Deployments

Deploy the Simple VM template with OpenTofu

Deployment · Updated Jun 2026

Coming from another cloud?

▸AWS·EC2 Single

This Quake AI feature maps to AWS’s EC2 Single.

▸DigitalOcean·Droplet

This Quake AI feature maps to DigitalOcean’s Droplet.

▸Hetzner·Server

This Quake AI feature maps to Hetzner’s Server.

Deploy the Simple VM template with OpenTofu

Stand up a volume-backed Ubuntu instance on a private network with one floating IP using the validated OpenTofu template simple-vm. The stack wires Compute (Nova), Network (Neutron), and Block Storage (Cinder) for a boot-from-volume instance behind a router, security group, and public IP.

Monthly cost estimate

Pricing calculator ↗

Sized as a custom package on shared vCPU.

Starting template$13.10/mo

Monthly total for the required template above. Use the configurator below to add optional pieces and see the total update.

What each resource is for

Vm

s1a.small · 2 shared vCPU, 2 GiB RAM, 0.5 Gbps

$16.50/mo

Compute shown per role at custom-package rates ($29/dedicated vCPU, $7.25/shared vCPU, $1/GiB RAM). The headline above is the billed total: the cheaper of a named plan and the custom package, plus add-ons.

Included in baseline

s1a.small

2 shared vCPU, 2 GiB RAM, 0.5 Gbps

$16.50

Compute + RAM rate basis

2 vCPU + 2 GiB RAM at $29/dedicated vCPU, $7.25/shared vCPU, $1/GiB RAM (regular). Totals apply the flat −$5/mo package promotion.

—

Block storage (20 GiB)

20 GiB at $0.08/GiB/mo

$1.60

Public IP (included)

1 included with the custom package

$0.00

Package promotional discount

Flat −$5.00/mo on the custom package (same promotion as named plans).

$-5.00

Included at no charge

These line items are zero on Quake AI. Many other providers meter them separately.

Data transfer (inbound and outbound)

Unlimited data transfer on every plan; Quake AI does not meter per-GB egress.

AWS, GCP, and Azure meter outbound transfer per GB. DigitalOcean and Hetzner include an allowance on compute plans, then charge overage.

Learn more
$0.00

Private networking

Private networks, subnets, Neutron routers, and security groups are included with the plan.

VPC objects are usually free to create elsewhere, but NAT gateways bill hourly plus per-GB processed. Quake AI uses router SNAT with no separate NAT line item.

$0.00

Control-plane API requests

OpenStack API calls for provisioning and management are included.

Some managed services on other clouds meter API calls or charge for premium control-plane features.

$0.00

Pricing data last validated: . For current rates, check quake.ai/pricing.

Quake AIRouterPrivate networkFloating IP(1)Security groupSSH + HTTPvmUbuntu instanceboot volume
Click to zoom
Simple VM topology: private network, router, security group, volume-backed instance, and one floating IP

Prerequisites#

You need:

Step 1: Configure variables#

Copy terraform.tfvars.example to terraform.tfvars and set key_name to an existing key pair in your project:

HCL
key_name = "YOUR_KEY_NAME"

Replace YOUR_KEY_NAME with the name shown in the Console under Compute > Key Pairs, or returned by openstack keypair list.

Defaults for flavor, image, network names, and CIDR are documented on the template reference page. Override them in terraform.tfvars when your project uses different names.

Step 2: Apply the template#

From the template directory, run:

bash
tofu init
tofu plan
tofu apply

Type yes when prompted. Provisioning takes a few minutes while Neutron wires the router and Nova builds the boot volume.

When the run finishes, note floating_ip, instance_id, and private_ip from the outputs.

Step 3: Verify SSH access#

Connect as ubuntu through the floating IP with the private key that matches key_name:

bash
ssh -i YOUR_PRIVATE_KEY_PATH ubuntu@$(tofu output -raw floating_ip)

Accept the host key prompt on first connect. A remote shell confirms the security group, router, and floating IP association work together.

Optional: send an HTTP request to port 80. The security group allows it even though this deployment does not install a web server:

bash
curl -I --connect-timeout 5 http://$(tofu output -raw floating_ip)

A connection timeout or refusal is expected without a listener; the check only confirms the floating IP routes to the instance.

Next steps#

Clean up#

Run tofu destroy from the project directory when finished. Type yes to confirm. Verify in the Console that the instance, boot volume, router, private network, security group, and floating IP are gone.

Was this page helpful?