### TERRAFORM AREA
terraform {
required_providers {
prodata = {
source = "prodata-cloud/prodata"
version = "~> 0.11.0"
}
}
}
### PROVIDERS
provider "prodata" {
region = "UZ5"
project_tag = "example-123"
api_key_id = "" # better go with export PRODATA_API_KEY_ID="your-api-key-id"
api_secret_key = "" # better go with export PRODATA_API_SECRET_KEY="your-api-secret-key"
}
### NETWORKING
# Create network
resource "prodata_local_network" "frontend_network" {
name = "my-frontend-subnet"
cidr = "10.10.1.0/24"
gateway = "10.10.1.254"
}
# Create public ip
resource "prodata_public_ip" "frontend_public_ip" {
name = "frontend-public-ip"
}
### STORAGE
# Create standalone volume
resource "prodata_volume" "frontend_volume" {
name = "frontend-volume"
type = "SSD"
size = 100
}
### COMPUTE
# Generate random password
resource "random_password" "frontend_password" {
length = 10
special = true
}
# Generate SSH key
resource "tls_private_key" "frontend_ssh_key" {
algorithm = "ED25519"
}
# Use data to get image id
data "prodata_image" "debian" {
slug = "debian-11"
}
# Create VM with password authentication
resource "prodata_vm" "frontend_1" {
name = "frontend-vm-1"
image_id = data.prodata_image.debian.id
cpu_cores = 2
ram = 4
disk_size = 50
disk_type = "SSD"
local_network_id = prodata_local_network.frontend_network.id
password = random_password.frontend_password.result
}
# Create VM with password SSH key authentication
resource "prodata_vm" "frontend_2" {
name = "frontend-vm-2"
image_id = data.prodata_image.debian.id
cpu_cores = 2
ram = 4
disk_size = 50
disk_type = "SSD"
local_network_id = prodata_local_network.frontend_network.id
ssh_public_key = tls_private_key.frontend_ssh_key.public_key_pem
}
### ATTACHMENTS
# Attach public ip to VM
resource "prodata_public_ip_attachment" "example" {
public_ip_id = prodata_public_ip.frontend_public_ip.id
vm_id = prodata_vm.frontend_1.id
}
# Attach standalone volume to VM
resource "prodata_volume_attachment" "example" {
vm_id = prodata_vm.frontend_1.id
volume_id = prodata_volume.frontend_volume.id
}