# Input variables variable "vultr_api_key" { type = string description = "Vultr API key." } variable "tld" { type = string description = "Root Top-Level Domain. Subdomains will be derived from it." } variable "nextcloud_tld_prefix" { type = string description = "DNS prefix used for the Nextcloud installation. Does not contain a dot at the end." } variable "hostname" { type = string description = "Human name of the host. This is a pet name, not cattle name :)" } variable "storage_name" { type = string description = "Name of the block storage volume, which will also be the name of it's mount point." } # Vultr provider "vultr" { api_key = var.vultr_api_key version = "~> 1.3" } # Instance resource "vultr_server" "vps_server" { enable_ipv6 = true notify_activate = true hostname = var.hostname label = var.hostname # $ curl https://api.vultr.com/v1/regions/list | jq '.["9"]' region_id = 9 # $ curl https://api.vultr.com/v1/plans/list?type=vc2 | jq '.["201"]' plan_id = 201 # $ curl -H "API-Key: $TF_VAR_vultr_api_key" https://api.vultr.com/v1/snapshot/list | jq snapshot_id = "e1d5f317b0f7a" } resource "vultr_block_storage" "vps_storage" { size_gb = 10 region_id = 9 attached_id = vultr_server.vps_server.id label = var.storage_name live = "yes" } # DNS and IP configuration output "public_ip" { value = vultr_server.vps_server.main_ip } resource "vultr_dns_domain" "vps_tld" { domain = var.tld server_ip = vultr_server.vps_server.main_ip } resource "vultr_dns_record" "at_sign" { domain = var.tld type = "A" name = "@" data = vultr_server.vps_server.main_ip } resource "vultr_dns_record" "nextcloud" { domain = var.tld type = "CNAME" name = var.nextcloud_tld_prefix data = vultr_server.vps_server.main_ip }