diff options
Diffstat (limited to 'terraform/stdvps/main.tf')
-rw-r--r-- | terraform/stdvps/main.tf | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/terraform/stdvps/main.tf b/terraform/stdvps/main.tf index 2328bb1..2e94f1d 100644 --- a/terraform/stdvps/main.tf +++ b/terraform/stdvps/main.tf @@ -6,6 +6,11 @@ variable "location" { type = "string" } +variable "volume_name" { + type = "string" + default = "" +} + resource "random_id" "server" { prefix = "peter-" byte_length = 2 @@ -33,6 +38,95 @@ resource "cloudflare_record" "record_aaaa" { type = "AAAA" } +resource "hcloud_volume" "master" { + count = "${var.volume_name == "" ? 0 : 1}" + name = "${var.volume_name}" + size = 50 + server_id = "${hcloud_server.server.id}" +} + +# volumes contain persistent storage and thus need to be initialized manually +resource "null_resource" "volume_mount" { + count = "${var.volume_name == "" ? 0 : 1}" + + triggers = { + server_id = "${hcloud_server.server.id}" + volume_id = "${hcloud_volume.master.id}" + } + + connection { + host = "${hcloud_server.server.ipv4_address}" + } + + provisioner "remote-exec" { + inline = ["mkdir -p /mnt/storage"] + } + + provisioner "file" { + content = <<EOF +[Unit] +Description=Mount /mnt/storage directory + +[Mount] +What=${hcloud_volume.master.linux_device} +Where=/mnt/storage +Type=ext4 +Options=defaults + +[Install] +WantedBy=multi-user.target +EOF + destination = "/etc/systemd/system/mnt-storage.mount" + } + + provisioner "file" { + content = <<EOF +[Unit] +Description=Mount /srv to persistent volume storage +After=mnt-storage.mount +BindsTo=mnt-storage.mount + +[Mount] +What=/mnt/storage/srv +Where=/srv +Type=ext4 +Options=bind + +[Install] +WantedBy=multi-user.target +EOF + destination = "/etc/systemd/system/srv.mount" + } + + provisioner "file" { + content = <<EOF +[Unit] +Description=Mount /home to persistent volume storage +After=mnt-storage.mount +BindsTo=mnt-storage.mount + +[Mount] +What=/mnt/storage/home +Where=/home +Type=ext4 +Options=bind + +[Install] +WantedBy=multi-user.target +EOF + destination = "/etc/systemd/system/home.mount" + } + + provisioner "remote-exec" { + inline = [ + "systemctl daemon-reload", + "systemctl enable --now mnt-storage.mount", + "systemctl enable --now srv.mount", + "systemctl enable --now home.mount" + ] + } +} + output "ipv4" { value = "${hcloud_server.server.ipv4_address}" } |