# Deploy the Heat Simple Stack template with the OpenStack CLI

Source: https://docs.quake.ai/resources/deployments/deploy-heat-simple-stack-template
Markdown: https://docs.quake.ai/resources/deployments/deploy-heat-simple-stack-template.md
> Stand up a volume-backed Ubuntu instance with Nginx on a private network and one floating IP using the heat-simple-stack HOT template.

---

# Deploy the Heat Simple Stack template with the OpenStack CLI

Stand up a volume-backed Ubuntu instance with Nginx on a private network and one floating IP using the Heat HOT template `heat-simple-stack`. The layout matches the [Simple VM with Floating IP](/resources/iac-templates/simple-vm) OpenTofu template, expressed as a HOT file instead of HCL.

<PricingCompanion
  components={[
    { kind: "template", slug: "heat-simple-stack", required: true },
  ]}
/>

<Figure size="md" caption="Heat simple stack topology: private network, router, security group, volume-backed instance with Nginx, and one floating IP">

```d2
direction: right

cloud: Quake AI {
  heat: Heat engine
  router: Router
  private: Private network {
    vm: Ubuntu instance\nboot volume\nNginx :80
  }
  fip: Floating IP\n(1)
  sg: Security group\nSSH + HTTP
}

cloud.heat -> cloud.private
cloud.router -> cloud.private
cloud.fip -> cloud.vm
cloud.sg -> cloud.vm
```

</Figure>

## Prerequisites

You need:

- The OpenStack CLI installed and configured for your Quake AI project ([application credentials](/docs/tools/generate-app-credentials) with **Unrestricted** enabled, because Heat creates a Keystone trust; see [How to create a Heat stack](/docs/automation/how-to/create-heat-stack))
- OpenStack credentials sourced into the shell (`source openrc.sh`). See [the OpenStack CLI guide](/docs/tools/openstack-cli).
- An SSH key pair already uploaded to the project
- A copy of `stack.yaml` from [the Heat Simple Stack template reference page](/resources/iac-templates/heat-simple-stack)


Heat is a legacy orchestration path. For new infrastructure, prefer the [Simple VM with Floating IP](/resources/iac-templates/simple-vm) OpenTofu template.


## Step 1: Create the stack

Pick a stack name unique in your project, such as `heat-simple-demo`. Pass your keypair name as the only required parameter:

```bash
openstack stack create --template stack.yaml \
  --parameter key_name=YOUR_KEY_NAME \
  heat-simple-demo
```

Replace `YOUR_KEY_NAME` with the name from **Compute** > **Key Pairs** or `openstack keypair list`.

Watch events while the stack converges:

```bash
openstack stack event list heat-simple-demo
```

When provisioning finishes, confirm status and read the floating IP:

```bash
openstack stack show heat-simple-demo -f value -c stack_status
openstack stack output show heat-simple-demo floating_ip -f value -c output_value
```

## Step 2: Verify Nginx

Confirm Nginx responds on port 80 through the floating IP:

```bash
curl -s --connect-timeout 10 http://$(openstack stack output show heat-simple-demo floating_ip -f value -c output_value) | head -5
```

You should see HTML that includes `heat-simple-stack`.

Optional: SSH as `ubuntu` with the private key that matches `key_name`:

```bash
ssh -i YOUR_PRIVATE_KEY_PATH ubuntu@$(openstack stack output show heat-simple-demo floating_ip -f value -c output_value)
```

Parameter defaults (`flavor`, `image`, `private_cidr`) are documented on the [Heat Simple Stack](/resources/iac-templates/heat-simple-stack) reference page.

## Next steps

- [Heat Simple Stack template](/resources/iac-templates/heat-simple-stack)
- [Deploy the Simple VM template with OpenTofu](/resources/deployments/deploy-simple-vm-template)
- [How to create a Heat stack](/docs/automation/how-to/create-heat-stack)
- [DevOps and automation](/resources/solutions/devops-automation)

## Clean up

Run `openstack stack delete --yes heat-simple-demo` when finished. Confirm the stack is gone with `openstack stack list | grep heat-simple-demo`. An empty result means Heat removed the instance, boot volume, router, private network, security group, and floating IP.
