Terraform Provider

Manage ServersCamp infrastructure as code with our official Terraform provider.

Installation

Add the provider to your Terraform configuration:

versions.tf
terraform {
  required_providers {
    serverscamp = {
      source  = "serverscamp/serverscamp"
      version = "~> 1.0"
    }
  }
}

Then run:

Terminal
terraform init

Provider Configuration

Configure the provider with your API token:

provider.tf
provider "serverscamp" {
  # Token can also be set via SERVERSCAMP_API_TOKEN env var
  api_token = var.serverscamp_token
}

Environment Variables

VariableDescription
SERVERSCAMP_API_TOKENAPI token for authentication

Resources

serverscamp_vm

Manages a virtual machine instance.

vm.tf
resource "serverscamp_vm" "web" {
  display_name = "web-server"

  vm_class_id      = "burst-xs"
  vm_template_id   = "ubuntu-25.04"
  storage_class_id = "standard-storage"
  network_class_id = "baseline-network"

  disk_gb    = 20
  network_id = serverscamp_network.main.id
  ssh_key_id = serverscamp_ssh_key.deploy.id

  assign_public_ips = true
}

output "vm_ip" {
  value = serverscamp_vm.web.public_ipv4
}

Arguments

NameTypeDescription
display_namestringOptional. Human-readable name
vm_class_idstringRequired. VM class (CPU/RAM)
vm_template_idstringRequired. OS template
storage_class_idstringRequired. Storage tier
network_class_idstringRequired. Network tier
disk_gbnumberRequired. Disk size in GB
network_idstringRequired. Network UUID
ssh_key_idstringOptional. SSH key ID
assign_public_ipsboolOptional. Assign public IPs

Attributes

NameDescription
idVM UUID
stateCurrent state (running, stopped, etc.)
internal_ipPrivate IP address
public_ipv4Public IPv4 address
public_ipv6Public IPv6 address

serverscamp_network

Manages a virtual private network (VPC).

network.tf
resource "serverscamp_network" "main" {
  display_name = "production"
  cidr         = "10.0.0.0/24"
  router_id    = serverscamp_router.gateway.id
}

serverscamp_router

Manages an internet gateway router.

router.tf
resource "serverscamp_router" "gateway" {
  display_name = "main-gateway"
}

output "router_ip" {
  value = serverscamp_router.gateway.public_ipv4
}

serverscamp_ssh_key

Manages an SSH public key.

ssh.tf
resource "serverscamp_ssh_key" "deploy" {
  name       = "deploy-key"
  public_key = file("~/.ssh/id_rsa.pub")
}

serverscamp_bucket

Manages an S3-compatible storage bucket.

bucket.tf
resource "serverscamp_bucket" "assets" {
  name = "my-app-assets"
}

output "bucket_endpoint" {
  value = serverscamp_bucket.assets.endpoint
}

Data Sources

serverscamp_vm_classes

List available VM classes.

data.tf
data "serverscamp_vm_classes" "all" {}

output "available_classes" {
  value = data.serverscamp_vm_classes.all.classes
}

serverscamp_vm_templates

List available OS templates.

data.tf
data "serverscamp_vm_templates" "all" {}

# Filter Ubuntu templates
locals {
  ubuntu_templates = [
    for t in data.serverscamp_vm_templates.all.templates :
    t if can(regex("ubuntu", lower(t.name)))
  ]
}

Complete Example

Deploy a web server with networking:

main.tf
terraform {
  required_providers {
    serverscamp = {
      source  = "serverscamp/serverscamp"
      version = "~> 1.0"
    }
  }
}

provider "serverscamp" {}

# Router for internet access
resource "serverscamp_router" "main" {
  display_name = "main-router"
}

# Private network
resource "serverscamp_network" "app" {
  display_name = "app-network"
  cidr         = "10.0.1.0/24"
  router_id    = serverscamp_router.main.id
}

# SSH key
resource "serverscamp_ssh_key" "admin" {
  name       = "admin-key"
  public_key = file("~/.ssh/id_rsa.pub")
}

# Web server
resource "serverscamp_vm" "web" {
  display_name     = "web-01"
  vm_class_id      = "burst-xs"
  vm_template_id   = "ubuntu-25.04"
  storage_class_id = "standard-storage"
  network_class_id = "baseline-network"
  disk_gb          = 20
  network_id       = serverscamp_network.app.id
  ssh_key_id       = serverscamp_ssh_key.admin.id
  assign_public_ips = true
}

output "web_server_ip" {
  value = serverscamp_vm.web.public_ipv4
}

output "ssh_command" {
  value = "ssh scamp@${serverscamp_vm.web.public_ipv4}"
}